Compare commits

...

1640 Commits

Author SHA1 Message Date
ita1024 6595748b91 Merge branch 'flang' into 'master'
fc: add support for the flang compiler

See merge request ita1024/waf!2372
2024-05-30 23:34:51 +00:00
Harald Klimach b5a6e58934 fc: add support for the flang compiler 2024-05-30 17:14:45 +02:00
ita1024 7c0532a82d Merge branch 'master' into 'master'
Options: set argparse conflict_handler in constructor

See merge request ita1024/waf!2371
2024-05-26 07:55:05 +00:00
Alibek Omarov bba5047716 Options: set argparse conflict_handler in constructor 2024-05-26 07:55:05 +00:00
Waf Project 0c0f49ce6f Update playground/updates 2024-05-25 19:33:04 +08:00
ita1024 b2f89369fc Merge branch 'a1batross-master-patch-59640' into 'master'
softlink_libs.py: fix printing default option value with argparse

See merge request ita1024/waf!2370
2024-05-25 08:52:28 +00:00
Alibek Omarov b94ec720d9 softlink_libs.py: fix printing default option value with argparse
As per argparse documentation
2024-05-25 01:39:55 +00:00
Waf Project 0d2f819d1e
waf-2.1.1 2024-05-21 20:52:15 +02:00
Waf Project bdd70055df Due to arparse, Python >= 2.7 is now required 2024-05-21 20:36:19 +02:00
Waf Project b47fceb86a Update more examples 2024-05-21 20:35:25 +02:00
Waf Project 69049d83b8 Update the javatest example 2024-05-20 23:45:39 +02:00
Waf Project 8d2ad010f5 Update the pyqt example 2024-05-20 23:37:27 +02:00
Waf Project 72db8e0240 Update the protobuf example 2024-05-20 23:24:32 +02:00
Waf Project 2485ab46cd Update the build file tracker example 2024-05-20 23:12:43 +02:00
Waf Project 68f84f9084 Fix the example in playground/rst 2024-05-20 21:04:25 +02:00
Waf Project 43c5ae670a Remove old broken examples 2024-05-19 15:59:06 +02:00
Waf Project 8a0ecaef5f Update another example 2024-05-19 15:28:36 +02:00
Waf Project 967abf694c Remove the dbus example since dbus-binding-tool is part of a deprecated library for D-Bus IPC 2024-05-19 12:46:04 +02:00
Waf Project 327471474f Options on the command-line should not raise conflicts by default 2024-05-19 12:44:53 +02:00
Waf Project 9ad45cb350 Update a few examples, and improve jni detection 2024-05-19 12:43:55 +02:00
Waf Project 149102f11f Argparse updates 2024-05-14 00:26:16 +02:00
Waf Project 4d0edd113a Print waf version 2024-05-12 02:20:25 +02:00
Waf Project 66a013ed28 waf-2.1.0
Signed-off-by: Waf Project <noreply@waf.io>
2024-05-02 00:03:48 +02:00
Waf Project bd5c22d484 Move from optparse to argparse 2024-04-28 00:35:28 +02:00
Waf Project a3fec9f0b3 Improve ldscript example 2024-04-21 06:59:27 +02:00
Waf Project e0dcfae373 Update c_nec and c_emscripten 2024-04-16 00:25:45 +02:00
Waf Project a7d05142c5 Update outdated playground examples 2024-04-07 19:34:00 +02:00
Waf Project 76f416ca14 Lock wafcache on non-posix systems 2024-04-01 17:02:15 +02:00
Waf Project 9f0773cfba Move wafcache optional imports 2024-04-01 11:18:07 +02:00
Waf Project ec63a7dd38 Change _add_task to add_task in Runner.py - part 2 2024-04-01 09:35:13 +02:00
swaldhoer 974d0589fd Minor docs improvement 2024-03-29 12:02:50 +01:00
Waf Project 39413bedfd Update playground/ldscript 2024-03-28 16:47:29 +01:00
Waf Project aef2c6ef23 Remove old Itanium references in msvc/ifort detection 2024-03-23 10:59:16 +01:00
Waf Project 456bd879bc Change _add_task to add_task in Runner.py 2024-03-23 10:58:59 +01:00
Waf Project 707b362685 Add the script path to OneApi Fortran compilers 2024-03-23 10:55:08 +01:00
Alibek Omarov 6e675dfc30 Configure: remove unused error_handlers
ConfigurationContext's error_handlers isn't used anywhere in the whole project,
and it's unknown how it should've been implemented
2024-03-09 12:21:02 +01:00
Waf Project d166646556 Reduce verbosity when both Qt5 and Qt6 are installed on a system
See aff9ec24a6
2024-03-09 12:16:56 +01:00
Federico Pellegrin a0b8f6a2a3 qt5: Revert pattern matching libraries as that breaks libs like QtX3D 2024-03-09 11:10:48 +01:00
Waf Project 761ed9beda Describe why color_gcc.py is no longer relevant 2024-03-09 11:10:41 +01:00
Waf Project ea1412b7e7 Avoid coloring all MSVC logs #2366 2024-03-09 11:10:34 +01:00
ita1024 53ca5a71ed Merge branch 'a1batross-waf-2.1-patch-93534' into 'waf-2.1'
extras: pthread: fix check for C mode with paranoid -Werror=old-style-declaration and -Werror=unused-variable

See merge request ita1024/waf!2365
2024-01-24 23:38:32 +00:00
Alibek Omarov 611cd30114 extras: pthread: fix check for C mode with paranoid -Werror=old-style-declaration and -Werror=unused-variable 2024-01-23 21:46:06 +03:00
Wynn Wilkes 84ba1e9da0 Fix possible crash in ctx.cmd_and_log() when verbose mode is on
- When waf is run with -v, and it runs a call to context.cmd_and_log() with an argument list,
  argument[0] is a relative path, and a cwd **kwarg is passed so that the argument[0] resolves
  correctly, then the call will crash saying the program could not be found. For example, the
  caller may be wrapping calls using a nodejs environment like:

  ctx.cmd_and_log("./node_modules/bin/webpack", cwd="webui")

  and this will fail with "Program ./node_modules/.bin/webpack not found!"
  if waf is run with -v. The user friendly check for usable programs still
  stays in place for shell calls and absolute paths, but allows the caller
  to use this pattern even when verbose mode is on. This same fix was
  previously made for context.exec_command().
2024-01-12 14:28:29 +01:00
Waf Project 01b4c03a84 Improve Qt6 detection with msvc 2024-01-12 14:13:07 +01:00
Waf Project 97a54d72da Typo 2024-01-12 14:10:54 +01:00
Waf Project 5122ef89f2 Fix exec_command & waf -v & custom path in environment 2023-12-10 22:43:52 +01:00
Wynn Wilkes 4a650f3455 Fix possible crash in ctx.exec_command() when verbose mode is on
- When waf is run with -v, and it runs a call to context.exec_command() with an argument list,
  argument[0] is a relative path, and a cwd **kwarg is passed so that the argument[0] resolves
  correctly, then the call will crash saying the program could not be found. For example, the
  caller may be wrapping calls using a nodejs environment like:

  ctx.exec_command("./node_modules/bin/webpack", cwd="webui")

  and this will fail with "Program ./node_modules/.bin/webpack not found!"
  if waf is run with -v. The user friendly check for usable programs still
  stays in place for shell calls and absolute paths, but allows the caller
  to use this pattern even when verbose mode is on.
2023-12-10 22:43:42 +01:00
Michael Vincent 20b04dd137 Improve msvc log output 2023-12-07 21:53:03 +01:00
Waf Project 266a75a4ef Switch to nonstopmode for latex prompts #2421 2023-12-07 21:14:05 +01:00
Björn Lindqvist 18192437a0 glib-mkenums is a Python script no need to check for perl 2023-10-21 10:47:05 +02:00
Waf Project 37808b3de4 Update the public key from the main branch 2023-10-21 10:36:54 +02:00
Waf Project d115501165 Duplicate the license to a file #2357
The license is in waf-light, but some people really want to have a file for it.
2023-10-21 10:17:57 +02:00
Björn Lindqvist 8b140fd541 Pass the args parameter through to parse_cmd_args 2023-10-21 10:05:03 +02:00
Waf Project 49231ab9ff Add macros for intel compiler detection (icx, icpx, ifx) 2023-10-21 10:04:38 +02:00
Dan Church 2689cc9518 Only detect binaries with execution permission
If for instance a program was in PATH and the file was marked
non-executable (`chmod -x`), `find_binary` it would still pick it up as
executable.
2023-10-21 10:04:05 +02:00
Waf Project 50644394f6 Detect new intel compilers (icx, icpx, ifx) 2023-09-26 22:40:09 +02:00
Björn Lindqvist f0b2fb9816 Fix crash in demos/asm
Crash is likely because gcc has become more strict in recent
version. To fix it I had to add the -no-pie flag and move mult10 to
the text section.
2023-09-26 22:39:40 +02:00
Waf Project dc5602608e Update the example that cleans any non-declared file #2415 2023-09-15 18:39:31 +02:00
Thomas Nagy 270a2e09b6 Update the documentation 2023-07-15 15:29:53 +02:00
ita1024 218da8fe28 Merge branch 'qt6-experimental2' into 'waf-2.1'
qt5: Add support for Qt6

See merge request ita1024/waf!2355
2023-07-15 11:05:10 +00:00
Rafaël Kooi 6c0a8c7c84 qt5: Add support for Qt6
Implements support for Qt6 by extending qt5.py. The user can opt in for
Qt6 support by setting cfg.want_qt6 = True. There's also a qt6 feature,
which at the moment is identical to the qt5 feature. Splitting has been
done now for futureproofing purposes. Qt6 libraries can be selected
through the cfg.qt6_vars variable. I didn't make an attempt at any
backwards compatibility by trying to load cfg.qt5_vars if it exists,
this is done so the move from Qt5 to Qt6 is a more deliberate process.

Signed-off-by: Rafaël Kooi <3961583-RA-Kooi@users.noreply.gitlab.com>
2023-06-22 19:08:28 +02:00
Alibek Omarov 2e8121f63f waflib: extras: msvs: enclose solution path into doublequotes in generated shell commands 2023-04-10 19:58:22 +02:00
ita1024 215de5f7d3 Merge branch 'waf-2.1' into 'waf-2.1'
Haxe Toolkit support

See merge request ita1024/waf!2352
2023-03-28 22:57:15 +00:00
Adam Barton 67dcb2b7f6 Haxe Toolkit support 2023-03-28 22:57:14 +00:00
Thomas Nagy d4f495bced Add Python 3.11 and 3.12 too 2023-03-28 01:21:30 +02:00
Alibek Omarov d7da1547f7 waf.bat fixes 2023-03-28 01:21:17 +02:00
Thomas Nagy ff0a8cec14 Support SOURCE_DATE_EPOCH in some places 2023-02-12 10:42:11 +01:00
Thomas Nagy 99bdb12a60 Add asynchronous wafcache uploads 2023-01-01 14:18:50 +01:00
Thomas Nagy 412c9e6b22 Fix suspicious warnings 2023-01-01 14:16:40 +01:00
Thomas Nagy c24ef5f3e6 Python3: install packages to "site-packages" (same as waf-2.0) 2022-12-31 10:19:18 +01:00
Thomas Nagy 69c95b5341 Provide a replacement for distutils.version.LooseVersion 2022-12-22 18:58:31 +01:00
Harald Klimach 240555a979 Adding an extra module to detect the Fujitsu Fortran compiler on ARM64FX. 2022-11-20 06:56:06 +01:00
Thomas Nagy e559bd08f2 Ensure find_program replaces more invalid characters 2022-11-20 06:55:13 +01:00
Thomas Nagy 698888f149 wafcache: skip uploads when inputs are modified while building 2022-10-02 01:51:02 +02:00
André Bauer af9a1a249d Fix typo in documentation. 2022-10-02 01:50:57 +02:00
Andrew Malachowski f69602d1df Improve cp65001 compat in cpython < 3.3 2022-10-02 01:50:50 +02:00
Federico Pellegrin fae5693f41 sphinx: support multiple output formats 2022-10-02 01:50:40 +02:00
Andrew Malachowski 23c975064e gccdeps: Harden class wrapping 2022-10-02 01:50:30 +02:00
Federico Pellegrin 78f49d44c8 pyqt5: improve autodetection of tools and add flag support
Improves autodetection by adding tool naming as found in some recent
distributions (ie. Fedora). Adds also possibility to pass via env
command line options to tools (needed ie. to explicitly pass
generator due to changes to uic/rcc tool).

Test updated to demonstrate and document the parameter needed to
work out of the box with newest tooling.
2022-10-02 01:50:23 +02:00
Thomas Nagy 7b912a0439 Ensure signed waf files can be created using Python3 2022-10-02 01:50:14 +02:00
Thomas Nagy 2a1eeba691 Sort visual studio versions by version number #2352 2022-05-22 11:30:52 +02:00
Alibek Omarov b91ef6a91b msvc: fix version detection when new and old compilers are installed 2022-05-22 11:30:34 +02:00
David Kassa b0ea8121e8 modernize macos demo 2022-05-19 00:46:03 +02:00
Thomas Nagy d7d5e9d2d6 docs: fix the inheritance diagrams in the apidocs 2022-05-17 23:54:58 +02:00
Thomas Nagy 5c90204a96 doc: fix the empty apidocs 2022-05-17 23:54:50 +02:00
Thomas Nagy 6b820ba879 docs: improve the featuremap's layout 2022-05-17 20:20:19 +02:00
Miro Hrončok b093e9eac7 Python: Use EXT_SUFFIX config var over the deprecated/removed SO
Fixes https://gitlab.com/ita1024/waf/-/issues/2386
2022-05-17 17:31:40 +02:00
ita1024 5d56dff596 Merge branch 'waf-2.1' into 'waf-2.1'
tools: c_tests: use stlib flag instead of shlib in check_endianness

See merge request ita1024/waf!2339
2022-05-14 22:21:10 +00:00
Francescodario Cuzzocrea 317e3e8579
tools: c_tests: use stlib flag instead of shlib in check_endianness
shlib is no-op in some baremetal newlib based toolchains (for example in
riscv one), and causes the check to fail as the --dynamic flag is not
recognized
2022-05-12 14:56:09 +02:00
Mathieu Parent 97302d9758 Add support for GNU/kFreeBSD
Where default compiler is gcc
2021-12-14 14:24:32 +01:00
Thomas Nagy 00c3cd31b6 Remove the 'check' target from eclipse.py because it is unused 2021-12-09 15:47:16 +01:00
Thomas Nagy 02d906f69a Avoid errors in case ECLIPSE_EXTRA_TARGETS is is set to None 2021-12-09 15:46:57 +01:00
Federico Pellegrin 41eb8ef35f eclipse: add possibility to add custom targets execution
Make it easy to add custom target executions in the automatic
eclipse configuration generation, for example to call other
standard waf targets from other tools or with specific options.
2021-12-09 15:44:30 +01:00
Thomas Nagy 8dc07cc533 Detect qt5 libraries in alphabetical order 2021-12-08 02:19:28 +01:00
Thomas Nagy 8ca3cbd277 Detect Qt3D* libraries #2368 2021-12-08 02:19:20 +01:00
Thomas Nagy d27e0bd271 Update the CI pipelines 2021-12-04 10:22:00 +01:00
Thomas Nagy 2bbee630cc Update the CI Pipelines for Python 2.7 2021-12-04 09:49:46 +01:00
Thomas Nagy f3c09355ef Update the CI pipelines 2021-12-04 09:38:20 +01:00
Federico Pellegrin 910133a5b6 wafcache: support stats also for multiple build commands 2021-11-24 20:42:26 +01:00
ita1024 065496a619 Merge branch 'waf-2.1-fix-python-tool' into 'waf-2.1'
Waf 2.1 fix python tool

See merge request ita1024/waf!2332
2021-09-30 19:30:49 +00:00
Morten V. Pedersen 59a9b24cf8 Waf 2.1 fix python tool 2021-09-30 19:30:49 +00:00
Federico Pellegrin 9c5945d85a eclipse: remove repeated entries in include paths for C/C++
Make sure just unique include paths (both system and local) are
added to prevent overcrowding with useless redundant include paths
that grow up a lot the generated XML file and make the usage of
the GUI messy.
The filter was already there for Java/Python.
2021-09-04 22:38:01 +02:00
Federico Pellegrin 229bf15ab2 eclipse: add generation of editor language settings
Add automatic generation of editor language settings for C and C++,
so the automatic code correction uses the correct compiler and
compiler flags, including for example the correct C/C++ standard
so construct from such standards are correctly managed by the IDE.
Correct compiler and flags are automatically generated using the
build environment data gathered during configure phase.
The playground example has been modified to contain some code that
is standard specific to demonstrate the new feature when run under
Eclipse.
2021-09-01 00:43:35 +02:00
Federico Giovanardi 664513aa44 Make clang_compilation_database compatible with variants
In the current implementation if a project is using
build variants it's not possible to use the clang_compilation_database
plugin because it strips the variant information from the build object.
2021-07-15 19:09:43 +02:00
Erik Parker 45bc50e523 color_gcc: Check that cmd has elements in it before processing it. 2021-07-15 19:09:24 +02:00
Thomas Nagy 9a60e7ed9e Process dependency Nodes in bld(rule=..., deps=[..]) 2021-07-15 19:09:18 +02:00
Thomas Nagy 95c2bc0702 Improve error messages from scanner errors #2356 2021-07-15 19:09:04 +02:00
Thomas Nagy 55d57d0b58 Handle deprecated Thread.setDaemon in Python 3.10 2021-05-13 17:12:40 +02:00
Thomas Nagy 747a339b7f Ensure ConfigurationContext.load/Context.load have the same interface (continued) 2021-05-13 17:02:31 +02:00
Thomas Nagy 86b1f0def1 Ensure ConfigurationContext.load/Context.load have the same interface 2021-05-09 10:32:16 +02:00
Thomas Nagy 2f248f78e2 Disable OpenIndiana from the pipelines 2021-05-06 21:48:46 +02:00
Thomas Nagy 58b58fb0ee On windows, try $INCLUDEPY/../libs to detect the Python library path 2021-05-06 21:48:39 +02:00
Federico Pellegrin 6ccfd6d704 swig: skip CR (\r) if present in module name
Handles presence of \r in module name (ie. DOS mode swig .i files)
Should fix #2350
2021-05-06 21:48:29 +02:00
Michael Vincent 22b72e167f gccdeps: Refactor cache lock
Rework how gccdeps' cached_nodes lock is used so acquiring the lock is
only necessary on a cache miss. Also use a "with" context manager to
simplify management of the lock lifecycle.

Ported from 8b5a2a2086
2021-05-06 21:48:18 +02:00
Michael Vincent bf97987991 gccdeps: Move scan() method
Move the scan() method down in the file to match msvcdeps' method
ordering. This makes it easier to compare gccdeps.py and msvcdeps.py
to keep them in sync.
2021-05-06 21:48:12 +02:00
Michael Vincent 30508f53c2 gccdeps: Rename some variables
Rename some local variables to clarify their purpose and to align with
msvcdeps.py.
2021-05-06 21:48:05 +02:00
Michael Vincent 615c32faef msvcdeps: Align with gccdeps
Just a few small changes to make msvcdeps.py align with gccdeps.py
better.
2021-05-06 21:47:53 +02:00
Michael Vincent e55b4b2375 msvcdeps: Remove unused variable 2021-05-06 21:47:45 +02:00
Thomas Nagy 67793aa173 Let msvcsdeps process relative paths and in a deterministic manner 2021-05-06 21:47:38 +02:00
Michael Vincent ba44704dbf msvcdeps: Faster case correction
Visual Studio returns paths to dependencies with incorrect case.
ant_glob() is very slow for this use case (40~50% impact to overall
build time). This patch uses os.listdir() to find the correct case
of each path component.
2021-05-06 21:47:28 +02:00
Alibek Omarov a82625297d c_config: add RISC-V generic detection 2021-04-15 17:30:54 +02:00
Erik Parker a23b3f5e9b winres: Pass include paths by environment variable 2021-04-05 22:04:23 +02:00
Erik Parker 68ff6f13b2 msvs: Update project sorting in visual studio solution file
In order to correctly set a default project in visual studio any folders
must be listed at the top of the solution file. This change ensures that
any folders included in generated solutions sort to the top of the .sln
file. The default project, if one exists, will be located after the
folders. Note that it should also be correct to place the default
at the top of the file, followed by any folders.
2021-03-13 07:11:17 +01:00
Thomas Nagy 28318c9cca Remove the method conf.add_as_needed because it does not check for the flag usage 2021-03-12 07:54:52 +01:00
Thomas Nagy bf5a825317 Work around faulty vcvarsall.bat scripts #2315 2021-01-30 16:22:55 +01:00
Bootsma, James ca3ca0591e waf_unit_test: Fix command handling under windows
The unit test tool moved from a simple split to using shlex.split for
handling the unit test command. This results in the path separators on
windows being treated as escapes.

To handle this the unit test exec command is properly escaped before
joining so that the subsequent split restores the original arguments.
The quote function is also exposed in the Utilities module so that
wscripts making use of the unit test tool can properly quote their
contributions to the command as well.
2021-01-21 18:51:47 +01:00
Thomas Nagy ff8c1828aa Allow mixing Unix paths with destdir on non-Unix platforms 2021-01-19 20:52:57 +01:00
Thomas Nagy b864388e12 Fix Build.py indentation 2021-01-19 17:51:01 +01:00
Thomas Nagy da5769172b Add more docs to clang_compilation_database 2021-01-19 17:50:56 +01:00
Thomas Nagy 0d0aa45d0b Increase clang_compilation_database and swig compatibility 2021-01-19 17:14:58 +01:00
Thomas Nagy e0c16b3ada Suppress cache trimming operation errors 2021-01-19 17:14:52 +01:00
Federico Pellegrin a8469f49d8 wafcache: fix reporting of concurrent trim error
As this is run in the non-waf process we don't have Logs, so we
write to stderr instead or we will get a NameError name 'Logs' is
not defined.
2021-01-11 23:39:45 +01:00
Federico Pellegrin 236e6a7945 cuda: pass correctly compiler options from nvcc to the underlying compiler with --compiler-options 2021-01-09 01:28:32 +01:00
Federico Pellegrin d17780bc6b cuda: solve warnings due to testapp being created by two tg 2021-01-09 01:28:24 +01:00
Federico Pellegrin 1d722360be wafcache: fix small typo on stats log message 2021-01-09 01:26:58 +01:00
Thomas Nagy a296b4119e Do not detect Qt6 when detecting Qt5 2020-12-26 20:43:37 +01:00
Federico Pellegrin 54464f0a20 wafcache: add simple cache statistics collection, configurable via env 2020-12-26 20:24:57 +01:00
ita1024 8a0850dd89 Merge branch 'waf-2.1' into 'waf-2.1'
Haxe support

This commit adds support for haxe over [lix](https://github.com/lix-pm/lix.client) toolkit
- haxe library validation: check and fetch missing libs if needed
- "haxe" loader with "hx" compiler
- HAXEFLAGS
- lib checking and uselib_store support
- ctx.haxe with `res` argument to be more simple
- error checking

See merge request ita1024/waf!2308
2020-12-23 20:38:58 +00:00
Andrew Brodko 5841a8571e Haxe support 2020-12-23 20:38:58 +00:00
Thomas Nagy 1e729ba345 Work around distutils MACOSX_DEPLOYMENT_TARGET regression #2330 2020-12-17 14:18:33 +01:00
Thomas Nagy a74d40a505 Improve clang_compilation_database interaction with wafcache 2020-12-15 13:07:47 +01:00
Thomas Nagy 6ed66ce90b Reduce wafcache verbosity on cleanup operations 2020-12-15 11:06:05 +01:00
Thomas Nagy 6a5753da93 Conceal wafcache decoding errors in Python3 2020-12-15 10:58:00 +01:00
Thomas Nagy b7c7ffccab Fix the file_to_object example 2020-12-09 08:21:19 +01:00
Thomas Nagy 81bb79ab3d Update the project's public key 2020-12-09 08:21:02 +01:00
Thomas Nagy 3af7222fa0 Improve the WAFCACHE_CMD description 2020-12-09 08:20:32 +01:00
Thomas Nagy 4219f0822c Reduce verbosity in out-of-tree builds 2020-12-09 08:20:21 +01:00
Thomas Nagy 4e61e3a563 Improve WAFCACHE_CMD parameter handling 2020-12-09 08:20:07 +01:00
Federico Pellegrin 5584d1e687 wafcache: make the extra more configurable for cloud providers usage 2020-12-09 08:19:58 +01:00
Thomas Nagy b41f13b3a0 Exclude wafcache symlink handling
- Exclude classes having folder or symlinks
- Exclude well-known Task classes from wafcache processing
- Remove stale 'waflib.Task.Task.chmod' processing
2020-12-08 22:00:52 +01:00
Federico Pellegrin d1eb41f944 wafcache: add support for MinIO/mc cache
Add support for MinIO object storage (https://min.io/) using the
MinIO client (https://github.com/minio/mc) to wafcache.

MinIO is an open-source, self-hostable, S3 compatible cache. The
MinIO client supports MinIO connections as well as normal S3/GCS
storages by configuring aliases beforehand.

Hint: some distributions have `mc` (the GNU Midnight Commander)
installed which is not the minio client, be aware of this (or your
build may get stuck with waf waiting for `mc` to never finish)
2020-11-02 17:50:13 +01:00
Federico Pellegrin 9cd8a801c7 waf_unit_test: consider ut_cmd always for task signature 2020-11-01 21:20:02 +01:00
Thomas Nagy 6f8828dc3a Force unit test re-runs on environment or command changes 2020-11-01 21:19:56 +01:00
Federico Pellegrin 47d097d5a0 waf_unit_test: make sure test is rerun if ut_str changes 2020-11-01 21:19:38 +01:00
Thomas Nagy cc03657db7 Invalidate previous configurations on "waf configure"
Previously-configured projects are now invalidated when
running "waf configure" so that subsequent builds
cannot continue.
2020-09-19 10:38:05 +02:00
Thomas Nagy 2b03690f02 The lrelease program is necessary, not lupdate 2020-09-19 10:09:45 +02:00
Thomas Nagy e73e8d680a Fail Qt5 detection immediately when the c++ compiler is missing 2020-09-19 08:49:05 +02:00
Thomas Nagy 3b41d92e3c Make sure lupdate is explicitly required 2020-09-19 08:40:44 +02:00
Dotan Cohen 6fba8d3742 Update tutorial.rst to clarify that the env attribute is shared between the cnf and bld parameters to their respective methods. 2020-09-06 20:00:37 +02:00
Dotan Cohen 2831c75093 Update tutorial.rst to use uniform parameter names in all places where the configure() method or its parameter is mentioned. 2020-09-06 20:00:29 +02:00
Thomas Nagy ea509dd782 Determine a suitable msvc version option from VSCMD_VER in environment
See b3d1a0c2d4
2020-08-19 23:54:04 +02:00
Thomas Nagy 025ba60ebf Force an asm-specific defines flag 2020-08-15 12:16:36 +02:00
ita1024 ccfe1fc19c Merge branch 'FixClangCL' into 'waf-2.1'
Fix configuration fail on Windows with clang-cl module when not using the llvm.org release

See merge request ita1024/waf!2298
2020-08-14 06:36:40 +00:00
3961583-RA-Kooi@users.noreply.gitlab.com 1f92d020e7 Fix configuration fail when using portable LLVM on Windows 2020-08-13 20:54:19 +02:00
Thomas Nagy 35b60bed61 Remove an extra 'pch' annotation in playgroud/pch/wscript 2020-08-10 21:23:16 +02:00
Thomas Nagy 43ce688cdf Fix playground/pch's second example 2020-08-10 21:23:09 +02:00
Thomas Nagy a168e28ec8 Port file_to_obj to Python3 2020-08-03 23:30:33 +02:00
Thomas Nagy f65d08f5d5 Improve wafcache process pre-allocation 2020-08-03 23:20:53 +02:00
Thomas Nagy b41b1741d1 Improve the definition of static link tasks 2020-07-20 22:51:24 +02:00
Alibek Omarov 260f6065b9 c_config: add MCST Elbrus detection 2020-07-20 22:37:51 +02:00
Matt Selsky 778c7ad74c Typo 2020-07-20 22:37:40 +02:00
Thomas Nagy e21aead3b3 Conceal gccdeps/msvcdeps errors on inaccessible/unreadable files 2020-07-20 22:37:34 +02:00
Thomas Nagy 05198a8302 gccdeps/msvcdeps: renaming a header must rebuild silently #2293 2020-07-20 22:37:28 +02:00
Thomas Nagy cd589cd86b Update c_dumbpreproc (broken) 2020-07-20 22:37:18 +02:00
Andreu Montiel 988542e500 Allow parameter "always" in doxygen tool (waflib/extra/doxygen.py) 2020-07-20 22:37:00 +02:00
Johan Pauwels cc11c1dec1 Escape quoted strings in Xcode project 2020-07-20 22:36:39 +02:00
Johan Pauwels 668392f9fb Export preprocessor macros in Xcode project 2020-07-20 22:36:28 +02:00
Johan Pauwels f67f175c39 Fix configuration of linker flags in Xcode file 2020-07-20 22:36:14 +02:00
Johan Pauwels 84e71c9408 Fix alignment in generated Xcode file 2020-07-20 22:35:57 +02:00
Johan Pauwels 495b7c0e04 Xcode6 py3 fix.
The return type of .keys() in Python 3 is no longer a list, but a 
'dict_keys', which does not support the '+' operator.
2020-07-20 22:35:41 +02:00
Federico Pellegrin 0c843e5d40 sphinx: fix installation phase (as generated files are unknown until build) 2020-07-20 22:35:28 +02:00
Thomas Nagy 14b7d15a03 Ensure that the assertion message is showed in python.py #2302 2020-07-15 17:35:22 +02:00
Thomas Nagy 6c99c7cb0b Add a configuration test for pthread detection #2264 2020-05-02 21:04:28 +02:00
Federico Pellegrin 5ee61cfa91 qt5: improve documentation on library detection and options 2020-05-02 19:09:43 +02:00
Michael Vincent d3c0017d21 msvcdeps: Tweak debug output
Print out which source file waf is gathering dependencies for and leave
the leading spaces in the dependency debug output because it can be
helpful to see the dependency hierarchy.
2020-05-02 19:09:34 +02:00
Mathieu Courtois 2a6817fa1c boost: ignore version number from library name 2020-05-02 19:09:22 +02:00
Thomas Nagy a910d07d55 Make the unit test result format API compatible with waf 2.0 2020-04-28 01:17:07 +02:00
ita1024 b599c8bb9d Merge branch 'waf_unit_tg' into 'waf-2.1'
waf_unit_test: return also task generator in report tuples

See merge request ita1024/waf!2285
2020-04-27 22:56:38 +00:00
Federico Pellegrin 04e586b28a waf_unit_test: correct also demos/playgrounds with addition of ut_task change 2020-04-24 08:52:01 +02:00
Federico Pellegrin ba9ddfbfcb waf_unit_test: return also test task in report tuples 2020-04-22 03:55:38 +02:00
Mathieu Courtois 186f627203 boost: fix removal of lib extension 2020-04-09 16:55:14 +02:00
Federico Pellegrin 0c616901b4 c_config: -flto and -fno-lto need to be passed also when linking 2020-03-27 20:20:30 +01:00
Thomas Nagy 4f8099fbdc Improve custom option processing #2280 2020-03-27 20:20:22 +01:00
swaldhoer 93a0258996 Add support for clang++ on cygwin 2020-03-27 20:20:12 +01:00
Thomas Nagy 4bfab7f926 Remove the accidental gccdeps requirement 2020-03-27 20:20:00 +01:00
swaldhoer 02cff4a20c add support for clang on cygwin 2020-03-27 20:19:49 +01:00
Michael Vincent b7549d33ed gccdeps: Add support for gas
Add support for generating and using gcc's native dependency files with
the GNU Assembler in addition to the existing C/C++ support.

When the gas and gccdeps tools are loaded, the configure step will test
whether gcc operating on an assembly file supports the -MMD argument.
If so, waf will pass the -MMD argument to .S files assembled with gcc
which will cause it to generate .d dependency files. Waf will then parse
those files for dependency information.

Note: This will only work for assembly files compiled through the gcc
frontend, not with GNU as directly. It also requires assembly files to
use the uppercase .S file extension.
2020-03-27 20:19:35 +01:00
Federico Pellegrin 405c322489 doxygen: add ext_int to force build ordering 2020-03-27 20:19:25 +01:00
Federico Pellegrin 0c855b0aa2 javatest: add dependency management for jar/java taskgens 2020-01-04 11:31:25 +01:00
Federico Pellegrin c438138476 javaw: fix buglet overwrites working variable while adding dependencies
variable x is used in the outer loop and gets corrupted by inner enumeration in case of non-jar dependency

to reproduce: use the demos/java and run waf build twice: the first time will work (since no class files around)
while the second will not since will by bad luck pick a class file in the inner loop
2020-01-04 11:31:15 +01:00
Morten V. Pedersen 3204e2597c Using suggested self.cmd.startswith approach 2020-01-02 19:58:25 +01:00
Morten V. Pedersen 058b5d3793 Fix detection of build context when a custom context is used 2020-01-02 19:58:18 +01:00
Thomas Nagy ce2e5ca9a2 Exclude ConfigSet from altering ConfigurationContext.run_build caches #2273 2019-12-20 07:57:20 +01:00
Thomas Nagy 13d9c8566c Reduce relative path lengths to work around Visual Studio limitations #2272 2019-12-18 07:27:03 +01:00
Thomas Nagy 07d3203e0b
Make multicheck collisions less likely 2019-12-14 23:49:24 +01:00
Thomas Nagy 35617abe5e Remove another sys.platform == win32 2019-12-11 19:51:49 +01:00
Thomas Nagy 015a51a7cf Split llvm-lib path discovery into its own function 2019-12-11 07:42:02 +01:00
Thomas Nagy 52a49960c1 Improve extras/clang_cl 2019-12-10 07:53:23 +01:00
Adriano Scoditti e3c275a96a Make distclean target 'no_lock_in_top/run' modifiers compatible with env vars 2019-12-10 07:32:16 +01:00
Thomas Nagy bab51bf9f4 Remove conf.find_cpp from irix compiler detection 2019-12-10 07:32:08 +01:00
Thomas Nagy 5ec740ad2e Update irixcc 2019-12-10 07:32:01 +01:00
ita1024 73d432eb0a Merge branch 'clang_cl2' into 'waf-2.1'
Clang-cl support

See merge request ita1024/waf!2273
2019-12-10 06:29:06 +00:00
Rafaël Kooi c4f18f8182 Add a ReadMe and example environment for clang-cl on Linux 2019-12-10 05:07:35 +01:00
Rafaël Kooi 273d9dbe73 Add a small example utilizing clang-cl 2019-12-10 05:07:35 +01:00
Rafaël Kooi 32c2a49bf0 Support pure clang-cl builds on not Windows
A.k.a. I just tested it on Linux.
2019-12-10 05:07:35 +01:00
Rafaël Kooi 7310ade7c3 Initial clang-cl support 2019-12-10 05:07:35 +01:00
Rafaël Kooi 9fee4dfa75 Ignore VIM temporary files and Windows waf unpacks 2019-12-10 04:55:31 +01:00
Severin Strobl 799001bfae Support versioned shared libraries.
Shared libraries often use a suffix encoding their version which should
be handled when parsing linker flags.
2019-11-24 09:07:58 +01:00
Thomas Nagy d97ac90419
Improve the Qt5 fPIC/fPIE detection 2019-11-16 18:47:34 +01:00
Thomas Nagy b27afc7bbc
Use task.get_cwd() in clang_compilation_database 2019-11-10 19:01:38 +01:00
ita1024 11f449ee57 Merge branch 'FixTypo' into 'waf-2.1'
Add back an accidentally deleted line clang_compilation_database.py

See merge request ita1024/waf!2269
2019-11-10 14:49:14 +00:00
Rafaël Kooi 5343e8547a Add back an accidentally deleted line clang_compilation_database.py 2019-11-10 15:45:36 +01:00
Thomas Nagy 394f3cdac8
Typo 2019-11-10 12:34:36 +01:00
Thomas Nagy 16dbeb73e8
Fix relative path comparisons in clang_compilation_database 2019-11-10 12:32:20 +01:00
Thomas Nagy 38b6f24d73
Update msvc_pdb.py from the master branch 2019-11-10 10:41:25 +01:00
Thomas Nagy e485b45472 Remove the dependency on Qt5Gui in the Qt5 detection 2019-11-10 10:39:39 +01:00
Federico Pellegrin 26309403fd Tools/c_config.py: update to documentation 2019-11-07 07:07:44 +01:00
Alibek Omarov 261a589a66 msvc_pdb: check compiled_tasks existence, so it will not misleadingly throw a stacktrace if no sources was added 2019-11-04 21:26:29 +01:00
Federico Pellegrin 64b74c7659 playground/swig: clean up java swig example 2019-11-04 21:26:13 +01:00
Thomas Nagy 142fe5016a
The future version will be 2.1.0 2019-11-03 10:45:20 +01:00
Thomas Nagy 4e171c87ad
Improve os.environ propagation #2264 2019-11-03 10:24:13 +01:00
Thomas Nagy b8f19bfea3 Improve cache activity verbosity 2019-10-29 07:31:41 +01:00
Thomas Nagy a6ff2fc274
Push wafcache files synchronously for now 2019-10-23 19:53:18 +02:00
Thomas Nagy 6ef3a95c48 Insert the classpath dependencies from other task generators in first position #2186 2019-10-23 07:39:03 +02:00
Rafaël Kooi dbc66d19ba [MSVC/Fortran] Add /Fd flag when /Zi or /ZI flags are detected
Fixes #1731
2019-10-22 07:25:31 +02:00
Thomas Nagy f93cd67b14
Remove WinCE detection from msvc.py 2019-10-20 08:23:36 +02:00
Thomas Nagy 4aaadc1320
Remove Winphone detection 2019-10-20 07:45:02 +02:00
Thomas Nagy 5041a862fb
Propagate ldflags to fortran tasks #2262 2019-10-20 07:39:11 +02:00
Thomas Nagy dbe338c246
Make wafcache a default module 2019-10-18 23:05:12 +02:00
Thomas Nagy 959d57b757
Remove the metaclass hierarchy in Python 2 2019-10-18 23:02:19 +02:00
Thomas Nagy 1068ff98ec
Waf file creation will now require Python 3 2019-10-17 20:05:48 +02:00
Thomas Nagy fbee1a19d2
Tune the application name on --help #2254 2019-10-14 07:59:40 +02:00
Thomas Nagy 6539bd1ad3
Improve error messages in c_aliases 2019-10-08 20:04:00 +02:00
Thomas Nagy 2758fb3f7c Silently ignore negative values for -j 2019-09-26 21:50:18 +02:00
ita1024 f7cfcce157 Merge branch 'swig_pg_1' into 'master'
swig playground: fix build for Python 3.x

See merge request ita1024/waf!2259
2019-09-13 22:25:28 +00:00
ita1024 a56186637c Merge branch 'pytest_njd' into 'master'
pytest: add handling also of java dependencies via CLASSPATH (ie. JEP/Jython)

See merge request ita1024/waf!2258
2019-09-13 22:24:55 +00:00
ita1024 39b92903e3 Merge branch 'javatest_njd' into 'master'
javatest: manage environment also for non-java dependencies (ie. JNI / JEP)

See merge request ita1024/waf!2257
2019-09-13 22:24:28 +00:00
Federico Pellegrin 02c3711e2e javatest: manage environment also for non-java dependencies (ie. JNI / JEP) 2019-09-13 22:24:28 +00:00
Federico Pellegrin 3969482777 swig playground: fix build for Python 3.x 2019-09-13 09:23:39 +02:00
Federico Pellegrin 7ab507c799 pytest: add handling also of java dependencies via CLASSPATH (ie. JEP/Jython) 2019-09-10 09:55:17 +02:00
Thomas Nagy 68bf3867df
Unbreak the endianness test with msvc 2019-09-08 22:51:09 +02:00
ita1024 57ee25f844 Merge branch 'clang-db' into 'master'
clang_compilation_database: fix #2247, add clangdb command to generate database by request without rebuilding, add tests (WIP)

Closes #2247

See merge request ita1024/waf!2256
2019-09-08 20:05:37 +00:00
Alibek Omarov b8fd6a0515 clang_compilation_database: fix #2247, add clangdb command to generate database by request without rebuilding, add tests (WIP) 2019-09-08 20:05:37 +00:00
Thomas Nagy 4389e4400e
Add WAFCACHE_NO_PUSH to extras/wafcache 2019-09-01 09:31:07 +02:00
Thomas Nagy aece9b5e4b Enable wafcache remote servers 2019-08-25 22:31:12 +02:00
Thomas Nagy 397432f81e Simplify the Python examples 2019-08-14 22:20:01 +02:00
Thomas Nagy d2060dfd8a Conceal imp warnings in Python3 2019-08-14 22:05:45 +02:00
Thomas Nagy 0c0916ebdb
Add a new file-based waf cache implementation 2019-08-01 21:23:46 +02:00
Thomas Nagy 2793fb7dbb
Improve endianness detection 2019-07-31 21:04:53 +02:00
Thomas Nagy 4a79f95aa4
Disable lto for the endianness configuration test #2250 2019-07-30 18:45:07 +02:00
Thomas Nagy ea17399be6
waf-2.0.18 2019-07-14 10:44:58 +02:00
Thomas Nagy 314689b899
IronPython is broken 2019-07-11 19:52:03 +02:00
Thomas Nagy 88a0778476
Update the environment to IronPython 2.7.9 2019-07-11 19:13:14 +02:00
ita1024 a91bb8fa63 Merge branch 'doxygen_order_fix' into 'master'
Fix doxygen task-gen. pars input before processing

See merge request ita1024/waf!2255
2019-07-11 16:58:08 +00:00
Thomas Nagy bbaa976ae0
Add executable arguments for configuration tests / execute=True
conf.check(..., execute=True, test_args=['--abc=def'])
2019-07-11 07:55:38 +02:00
Thomas Nagy 88fa1fab83
Make the configuration cache more accurate #2251 2019-07-08 19:23:50 +02:00
Philipp Spilger ab167f687d Fix doxygen task-gen. pars input before processing
* OUTPUT_DIRECTORY now is created for a present parameter in `pars`
  of the task.
2019-07-05 10:38:10 +00:00
ita1024 fbe75085c6 Merge branch 'genpybind' into 'master'
Add 'genpybind' feature

See merge request ita1024/waf!2244
2019-07-02 10:46:22 +00:00
Yannik Stradmann 1fd2e4174c Add genpybind example 2019-07-02 12:15:18 +02:00
David Stöckel 0c16ab4f65 Set resource-dir explicitly for genpybind-parse 2019-07-02 10:46:34 +02:00
Johann Klähn cc20b414b3 Add genpybind feature 2019-07-02 10:46:34 +02:00
Thomas Nagy 190555a8d6 Add a testcase for #2244: deadlock with cython+subst tasks 2019-06-28 08:47:33 +02:00
Thomas Nagy 8cf982a766 Fix a deadlock with cython+subst tasks #2244 2019-06-27 09:38:49 +02:00
Thomas Nagy 3c75c6eccb Ensure waf-light is first in sys.path (Pip integration) 2019-06-27 08:38:33 +02:00
ita1024 ba3135c52b Merge branch 'pip_integration' into 'master'
Pip integration

See merge request ita1024/waf!2253
2019-06-27 06:36:48 +00:00
Adriano Scoditti dff204fad4 Move setup.py in subdir to unclutter the project root 2019-06-26 16:13:55 +02:00
Adriano Scoditti 56f3723a86 Removing the incorrect License description 2019-06-26 15:37:45 +02:00
Thomas Nagy 2e9954e087 Add a dependency scanner for gas/yasm and nasm (incomplete) 2019-06-26 15:00:03 +02:00
Adriano Scoditti da37dfb7a9 Adds script section to install waf-light bin and make it look for waflib in PYTHONPATH 2019-06-26 14:40:20 +02:00
Adriano Scoditti 5877a15ece Waf Pip integration through a setup.py in root 2019-06-26 14:40:20 +02:00
ita1024 bdb4dd90f6 Merge branch 'distclean_no_locks_aware' into 'master'
Do not clean lock files in top and run dirs if no-lock opts are set

See merge request ita1024/waf!2252
2019-06-26 10:46:33 +00:00
Thomas Nagy 770910fcda Detect of assembly features in bld.program()/bld.shlib() 2019-06-26 12:03:29 +02:00
Thomas Nagy 05252b85df Fix PIE errors in demos/asm/ 2019-06-26 11:51:56 +02:00
Adriano Scoditti 9e59917ee0 Do not clean lock files in top and run dirs if no-lock opts are set 2019-06-26 11:33:46 +02:00
Thomas Nagy b7a6114ac7 Limit fast_partial.py failures on configuration tests 2019-06-25 11:53:00 +02:00
Thomas Nagy 173f410e3f Improve the configuration cache accuracy 2019-06-25 11:51:44 +02:00
Thomas Nagy 9b3ab4b874 Improve fast_partial compatibility #2240 2019-06-23 08:45:18 +02:00
Thomas Nagy 497b875a89 Add -fno-strict-aliasing flags only if missing
https://gitlab.com/ita1024/waf/merge_requests/2248/diffs
2019-06-20 23:14:51 +02:00
ita1024 0178e6a692 Merge branch 'python_flat_install' into 'master'
Allow for flat install of python files via `py` feature

See merge request ita1024/waf!2249
2019-06-20 17:18:55 +00:00
Yannik Stradmann 8353c5ebfb Add demo for nested/flat python file installation 2019-06-19 23:46:27 +02:00
Eric Müller e319a9c2c9 Allow for flat install of python files via `py` feature 2019-06-19 22:33:36 +02:00
ita1024 e9498c9ad7 Merge branch 'cross_prefix_objcopy' into 'master'
Use cross_prefix option for objcopy if available

See merge request ita1024/waf!2247
2019-06-19 20:29:27 +00:00
ita1024 3b14e8f513 Merge branch 'rpath_fix' into 'master'
Fix local_rpath tool

See merge request ita1024/waf!2246
2019-06-19 20:25:07 +00:00
Eric Müller 97ab1e5a52 Use cross_prefix option for objcopy if available 2019-06-19 22:15:03 +02:00
Eric Müller 68ec2057b9 Fix local_rpath tool 2019-06-19 22:03:59 +02:00
ita1024 d536d3ebab Merge branch 'javaw_outdir_type' into 'master'
javaw: bugfix outdir is always a node (since converted in apply_javac)

See merge request ita1024/waf!2242
2019-06-06 22:16:15 +00:00
Federico Pellegrin fc0f5c86fd java demo: add test case for !2242 2019-06-06 20:33:43 +02:00
Thomas Nagy 1ade97f5c3
Add a configuration test for: "qt5 demo: add example of unit testing using QtTest" 2019-06-06 17:57:33 +02:00
Thomas Nagy 9df72c7898
Rework "qt5 demo: add example of unit testing using QtTest" 2019-06-06 16:45:24 +02:00
Thomas Nagy 82afd0a0e4
Rework "qt5 demo: add example of unit testing using QtTest" 2019-06-06 16:37:19 +02:00
fedepell 31c51501d7 javaw: bugfix outdir is always a node (since converted in apply_javac) 2019-06-06 15:06:41 +02:00
ita1024 31da55afb9 Merge branch 'qt5_unit_test' into 'master'
qt5 demo: add example of unit testing using QtTest integrated into waf

See merge request ita1024/waf!2241
2019-06-05 17:21:51 +00:00
fedepell e6eca1eec5 qt5 demo: add example of unit testing using QtTest integrated into waf with standard waf_unit_test Tool 2019-06-05 14:59:26 +02:00
Thomas Nagy 36898e12af
waf-2.0.17 2019-06-02 09:45:17 +02:00
Thomas Nagy 3e605feb72
Ensure that 'waf test' raises a meaningful error message in the installation test 2019-06-02 09:25:16 +02:00
Thomas Nagy fa6496dbc4
Use a constant instead of a hard-coded number (Qt5) 2019-06-02 09:23:57 +02:00
Thomas Nagy 36a0c12b3b
Rework installation colors 2019-06-02 09:20:29 +02:00
Thomas Nagy 6bc6cb599c
Refactor javaw.py 066a051181 2019-06-02 08:50:06 +02:00
Thomas Nagy 66fafd876a
Improve Qt5 processing 1de43d82c0 2019-06-02 08:43:19 +02:00
ita1024 387f01750c Merge branch 'javac_dep_robust' into 'master'
javaw: make dependencies code introduced in !2232 more robust

See merge request ita1024/waf!2239
2019-06-02 06:39:50 +00:00
ita1024 1de43d82c0 Merge branch 'qt5_partial_target' into 'master'
qt5: ignore moc generation on uninstall target

See merge request ita1024/waf!2240
2019-06-02 06:38:07 +00:00
fedepell a2589b9ed4 qt5: ignore moc generation on uninstall target 2019-06-02 00:57:33 +02:00
fedepell 066a051181 javaw: make dependencies code introduced in !2232 more robust 2019-05-28 11:40:43 +02:00
ita1024 e902e7a505 Merge branch 'add-missing-colors-on-install' into 'master'
Colors were missing when file already exists

See merge request ita1024/waf!2238
2019-05-27 19:14:18 +00:00
Morten V. Pedersen 1da4160b47 Colors were missing when file already exists 2019-05-27 19:14:18 +00:00
Thomas Nagy 14b6f47a24
Do not attempt to close fds on Windows platforms 2019-05-27 18:31:34 +02:00
Thomas Nagy 92e9764f58
Optimize sub process startup with workers 2019-05-27 18:05:02 +02:00
ita1024 503b09c984 Merge branch 'sphinx' into 'master'
sphinx: adds a tool for Sphinx documentation.

See merge request ita1024/waf!2237
2019-05-27 04:25:58 +00:00
Piotr Szubiakowski f547a5f932 sphinx: adds an example to the playground. 2019-05-26 13:37:34 +02:00
Thomas Nagy 8f0dd7c0b6
docs #2240 2019-05-26 12:20:34 +02:00
ita1024 d172c960e2 Merge branch 'patch-1' into 'master'
Fix waf.bat ERRORLEVEL to return actual exit code of waf

See merge request ita1024/waf!2235
2019-05-25 11:05:41 +00:00
ita1024 537af7f9f5 Merge branch 'python38' into 'master'
Python 3.8 has different flags for pyembed, needs --embed

Closes #2239

See merge request ita1024/waf!2236
2019-05-25 10:57:17 +00:00
Piotr Szubiakowski 3ef3f3f39c sphinx: adds a tool for Sphinx documentation.
Signed-off-by: Piotr Szubiakowski <pkszub@gmail.com>
2019-05-24 14:29:35 +02:00
Miro Hrončok 38d1cbeba4 Python 3.8 has different flags for pyembed, needs --embed
As recommended in the docs, to support both 3.8 and
previous versions, we try to use python3-config --embed and
fallback to the previous behavior.

Fixes https://gitlab.com/ita1024/waf/issues/2239

See https://docs.python.org/dev/whatsnew/3.8.html#debug-build-uses-the-same-abi-as-release-build
2019-05-24 11:49:58 +02:00
Alibek Omarov 4e307d3b50 Fix waf.bat ERRORLEVEL to return actual exit code of waf 2019-05-23 22:47:51 +03:00
ita1024 b1ac2bc686 Merge branch 'update-install-colors' into 'master'
Update colors of install step

Closes #2238

See merge request ita1024/waf!2234
2019-05-17 05:46:17 +00:00
Morten V. Pedersen 396117b4dd Update colors of install step 2019-05-17 05:46:17 +00:00
Thomas Nagy c295c0bcda
waf-2.0.16 2019-05-15 23:54:47 +02:00
Thomas Nagy 8cbc8da5ce
Undo parentheses escaping in ant_glob 2019-05-10 23:13:01 +02:00
ita1024 89146d9030 Merge branch 'ClangCross' into 'master'
Better support for cross compilation with clang v2

See merge request ita1024/waf!2233
2019-05-10 05:50:55 +00:00
Dragoon 1581e221b4 Add a simple example for using Clang as a cross compiler for MSVC 2019-05-10 00:30:58 +02:00
Dragoon 6154a8de60 Better support for cross compiling with Clang 2019-05-10 00:30:58 +02:00
ita1024 96015a3053 Merge branch 'msvcdeps-case' into 'master'
msvcdeps: correct case of include paths

See merge request ita1024/waf!2228
2019-05-09 05:05:39 +00:00
Michael Vincent 9caad8c3ba msvcdeps: use ant_glob() to get correct case of include paths
When using msvcdeps, header dependencies are not detected reliably for
generated source files. The root cause is a bug in versions of MSVC
prior to VS2019 16.0 in which it emits lower-case path prefixes when
resolving include paths relative to the containing file. Absolute paths
and paths relative to include directories passed in the MSVC command
line are, in contrast, case-correct.

Such a file-relative include directive with an incorrect lower-case
prefix derails waf's node hash signature handling and fails silently.

This change uses ant_glob() with the ignorecase keyword argument to
find the file on the filesystem with the correct case. The prior
case-correction code has been superseded and was removed.

See the following Visual Studio bug report for details on the issue:
https://developercommunity.visualstudio.com/content/problem/233871/showincludes-lowercases-some-path-segments.html
2019-05-08 17:22:00 -05:00
Michael Vincent 7c362340af msvcdeps: remove path_to_node()'s path list support
Make path_to_node() only accept a path as a string instead of also as a
list. That requires joining the list of path components in the relative
path case before calling path_to_node(). Also use path.pop(0) to remove
the first path component instead of copying the remainder of the path
using a slice operator.
2019-05-08 17:22:00 -05:00
Michael Vincent 8b5a2a2086 msvcdeps: refactor cache lock
Rework how msvcdeps' cached_nodes lock is used so acquiring the lock is
only necessary on a cache miss. Also use a "with" context manager to
simplify management of the lock lifecycle.
2019-05-08 17:22:00 -05:00
Michael Vincent e874342103 Node: escape parentheses in ant_glob()
ant_matcher() converts an ANT glob pattern to an equivalent regex
pattern. This commit adds support for escaping parenthesis in the
input pattern so they don't end up being treated as a regex capture
group.

Also add a unit test to verify ant_glob()'s ability to handle special
characters in the input pattern.
2019-05-08 17:22:00 -05:00
ita1024 afa0dd15df Merge branch 'java_deps_1' into 'master'
javaw: set dependency between javac task and use-d generated jars nodes

See merge request ita1024/waf!2232
2019-05-08 05:18:43 +00:00
Federico Pellegrin b45634d380 javaw: add node dependencies for non-jar tasks to all generated class files 2019-05-08 05:18:31 +02:00
Federico Pellegrin b22b5636e9 javaw: also when using non-jar CLASSPATH has to be populated to use-d tasks. In this case we point to the directory instead of the JAR file 2019-05-08 05:06:29 +02:00
fedepell d9babce4ce javaw: set dependency between javac task and use-d generated jars nodes 2019-05-07 14:42:39 +02:00
ita1024 0a61596679 Merge branch 'protoc-java-cdir' into 'master'
protoc: make sure output directory exists for java

See merge request ita1024/waf!2231
2019-05-06 16:15:50 +00:00
fedepell 1837984e7e protoc: make sure output directory exists for java 2019-05-06 08:17:20 +02:00
ita1024 b2d6866096 Merge branch 'pyqt5-cmdline-1' into 'master'
pyqt5 extra enhancements

See merge request ita1024/waf!2229
2019-04-26 05:38:23 +00:00
fedepell 23b09f7493 pyqt5: bugfix, check the correct variable for RCC executable 2019-04-25 11:56:08 +02:00
fedepell d7f5b986c6 pyqt5: correct the spelling to PySide2 in all occourences 2019-04-25 11:55:31 +02:00
fedepell 6c1465a6ac pyqt5: add option to enable explicitly PyQt5 bindings
Previously one could explicitly state to use PySide2 or PyQt4 but not PyQt5 which was picked just by default. In this way the option can override local configurations and also this prevents to have mixed tools versions if we are sure we need PyQt5.
2019-04-25 11:53:00 +02:00
Thomas Nagy 2e58ac4134
When creating the waf script, assume that the 'extras' folder only contains Python files
Files are also listed in a static arbitrary order.
2019-04-23 07:39:19 +02:00
Thomas Nagy 4ed9af0ee9
Node.listdir outputs are already sorted, do not sort it again in Node.ant_glob 2019-04-23 07:13:02 +02:00
Thomas Nagy 8a32540045
Workaround for Issue 2232 2019-04-22 00:14:17 +02:00
Thomas Nagy 85c499b1cc
Describe how to load md5_tstamp - Issue 2231 2019-04-19 18:47:02 +02:00
ita1024 14ba605138 Merge branch 'doxy' into 'master'
doxygen: maintain order of lines in doxyfile

See merge request ita1024/waf!2223
2019-04-18 06:16:24 +00:00
ita1024 782ee0fcbc Merge branch 'msvcdeps-nostdout' into 'master'
msvcdeps: fix 'WafError' AttributeError

See merge request ita1024/waf!2226
2019-04-18 06:12:37 +00:00
ita1024 61c9415b30 Merge branch 'javadoc-optional' into 'master'
javaw: make javadoc optional

See merge request ita1024/waf!2225
2019-04-18 06:12:08 +00:00
ita1024 88a88fa671 Merge branch 'msvc-debug' into 'master'
msvc: add pdb_install_task with /DEBUG:* flags

See merge request ita1024/waf!2224
2019-04-18 06:11:07 +00:00
Robert Herbst fc7648b386 javaw: make javadoc optional
Make javadoc optional to support builds on platforms that don't include
javadoc in their Java distribution.
2019-04-16 19:09:43 -05:00
Kevin Markussen cce984f77b msvcdeps: fix 'WafError' AttributeError
This patch corrects an error in the exec_response_command exception
handler which always assumed that the execution's stdout would be bound
to the the WafError exception object.

However, this assumption is only true when the execution completes with
a non-zero status code. For other exceptions, the stdout attribute is
not bound.

Now, when stdout is not available, the WafError msg will be used
instead.
2019-04-16 17:28:28 -05:00
Lucian Teodorescu 08723978e2 doxygen: maintain order of lines in doxyfile
The order of the lines in a doxyfile are important. This patch uses an
ordered dictionary to keep the keys of the doxyfile in the same order.

This is particularly important for doxyfiles that contain @INCLUDE
lines. In such cases, if the dictionary is not ordered, the @INCLUDE
line can end up in the middle of the generated doxyfile and thus
override all entries that were seen before it.
2019-04-15 18:01:49 -05:00
James Harris c083461978 msvc: add pdb_install_task with /DEBUG:* flags
Currently PDBs are only installed if the /DEBUG flag appears in the
current toolchain's LINKFLAGS attribute. This patch expands support
so that /DEBUG:FULL and /DEBUG:FASTLINK also cause PDBs to be
installed.
2019-04-15 17:52:03 -05:00
Thomas Nagy 5e90de89d8
Python 2 encoding enhancements - Issue 2230 2019-04-15 21:18:45 +02:00
ita1024 9f2ce1b776 Merge branch 'fix-macos-syms' into 'master'
extras/syms: fix symbol regex on mac-o binaries

See merge request ita1024/waf!2222
2019-04-01 18:55:40 +00:00
William Light 944debb156 extras/syms: fix symbol regex on mac-o binaries
mac-o symbols are prefixed with an underscore. when specifying multiple
sub-regexes (e.g. 'sym1|sym2|sym3'), only the first will be matched
(since the expansion turns into '(?P<symbol>_?sym1|sym2|sym3)'). here,
this is remedied by wrapping the symbol regex in a paren group.
2019-03-31 19:32:39 +02:00
ita1024 e260b4a642 Merge branch 'color-msvc' into 'master'
Add color_msvc tool, which colorizes MSVC output

See merge request ita1024/waf!2221
2019-03-26 06:31:16 +00:00
Alibek Omarov 62b935aec8 Add color_msvc tool, which colorizes MSVC output like GCC does by default 2019-03-20 01:25:48 +00:00
ita1024 bffbcec678 Merge branch 'waf_ut_enc' into 'master'
waf_unit_test: prevent error when dumping run to script and environment contains UTF-8 chars

See merge request ita1024/waf!2220
2019-03-12 16:52:47 +00:00
fedepell f903ad5f90 waf_unit_test: prevent error when dumping run to script and environment contains UTF-8 chars 2019-03-12 15:46:46 +01:00
Thomas Nagy 02c9f814da
waf-2.0.15 2019-03-10 16:44:06 +01:00
Thomas Nagy 5f811ee018
waf-2.0.15 2019-03-10 16:22:03 +01:00
ita1024 503db290b7 Merge branch 'typos' into 'master'
Typos

See merge request ita1024/waf!2219
2019-03-08 06:41:22 +00:00
Matt Selsky d8f7fe165f Typos 2019-03-07 22:13:40 -05:00
Thomas Nagy b1baa2b8e1
Revert the args file threshold on non-win32 systems from #2214 2019-03-03 17:43:34 +01:00
Thomas Nagy b72fabf8e5
Do not expose Task.allow_argsfile and remove allow_argsfile from non-Task class #2216
The class waflib.Tools.winres.rc_parser is not a subclass of waflib.Task.Task:
rc_parser -> c_preproc.c_parser -> object
2019-03-03 17:04:53 +01:00
ita1024 e3c0c1b571 Merge branch 'add-allow_argsfile-to-tasks' into 'master'
task: winres: allow tasks to disable @argsfile

Closes #2224

See merge request ita1024/waf!2216
2019-03-03 15:15:36 +00:00
ita1024 7aa608889d Merge branch 'fix-path-calculations-in-git-bash' into 'master'
Utils: only use msys2 paths from msys2 python

See merge request ita1024/waf!2217
2019-02-26 17:26:32 +00:00
James Harris 84fd982f4b Utils: only use msys2 paths from msys2 python
This patch attempts to detects if, when we are running from within an
MSYS2 environement (MSYSTEM is set) we are also executing inside an
MSYS2 provided version of python. It does this by assuming that if we
are not in a cygwin environment and we are building on windows, If the
value of sys.executable is /usr/bin or /bin or /usr/local/bin (somethign
unixy) then we are running in an MSYS2 python interpreter and shoudl
compensate for msys2 root paths. Otherwise we shouldn't be doing extra
path manipulation.
2019-02-26 17:26:32 +00:00
Thomas Nagy 57377901fe
Fix 4046e48ac1 from #2214
TypeError: can only concatenate list
2019-02-24 10:50:44 +01:00
James Harris 9599cc532f task: winres: allow tasks to disable @argsfile
Not all tools executed by tasks support the '@argsfile' syntax for
shunting commandline arguments to a file. This means that if such
commands are shunted to a file early, he command will not work. On
windows the rc.exe command is such an example, but some tools on linux
have similar limitations. In the posix case, we artifically limit our
commandline size because it is difficult/variable to caluclate what the
actual limit is (it is partially dependent on environment size). This
could artifically cause commands to fail due to commandline length when
they otherwise wouldn't.

This patch fixes this issue by adding the 'allow_argsfile' flag to the
task. This way certain task instances will be able to specify if they
are compatible with the '@argsfile' syntax or not.
2019-02-19 12:48:04 -06:00
ita1024 2af495bcad Merge branch 'bug-2225-fix' into 'master'
Address ntpath bug with empty prefix

See merge request ita1024/waf!2215
2019-02-18 18:05:19 +00:00
James Harris 17b69226c4 Address ntpath bug with empty prefix
This patch addresses the bug described in issue #2225 where in using
posix paths and an empty PREFIX value can result in files being
installed to the root of the drive specified by destdir instead of to
the desired prefix value.  This is a bug in the assumption that user
specified paths that are strings will contain directory separators that
match the target operating system.
2019-02-18 11:38:45 -06:00
ita1024 bd3431e483 Merge branch 'fix-cmd-length-calculation' into 'master'
task: calculate correct cmdline bytes

See merge request ita1024/waf!2214
2019-02-15 17:33:27 +00:00
James Harris 4046e48ac1 task: calculate correct cmdline bytes
The previous patches to workaround
http://support.microsoft.com/kb/830473 drastically over estimated the
number of characters in commands by treating the repr() version of the
command array as a reasonable estimator of commandline length. This
caused commands attempt to write argsfiles before they should have.

The new calculation calculates the number characters in the command
array and adds the number of spaces that would be added by ' '.join(cmd)
this provides a much closer estimate of the commandline length.

This also limits the CLI-length on non windows platforms to 200kB. This
prevents us hitting the much larger argument limits on Linux/BSD/MacOS
platforms.
2019-02-15 10:50:27 -06:00
ita1024 f01354049d Merge branch 'patch-1' into 'master'
added stubs/ to lib search paths

See merge request ita1024/waf!2213
2019-02-14 06:45:43 +00:00
Maurizio Drocco cb28dc94ab added stubs/ to lib search paths 2019-02-13 23:40:47 +00:00
ita1024 62e5397d98 Merge branch 'java_antglob_warnings' into 'master'
javaw: add quiet=True to ant_globs to suppress warnings of globbing in build

See merge request ita1024/waf!2212
2019-01-31 19:34:22 +00:00
fedepell 44046343c9 javaw: add quiet=True to ant_globs to suppress warnings of globbing in build
Most of the ant_globs used are explicitly and knowingly on build directory
(ie. javadoc, jar re) so the warning is quite spurious. The only one that
may be in doubt is the source re one: I added also here because if you use
a code generator (ie. protoc) then it is also correct to glob on builds and
the warning is misleading.
2019-01-31 07:03:26 +01:00
ita1024 3050136230 Merge branch 'allow_multiple_default_cmds' into 'master'
Support multiple 'default_cmd'

See merge request ita1024/waf!2211
2019-01-30 06:53:25 +00:00
Adriano Scoditti 21ac17d510 Support multiple 'default_cmd' 2019-01-29 11:48:54 +01:00
ita1024 b59dcf5d80 Merge branch 'buildcopy-no-nodes' into 'master'
buildcopy: Added warning if buildcopy is used without any files to copy

See merge request ita1024/waf!2210
2019-01-25 18:43:23 +00:00
xbreak 33208b3747 buildcopy: Added warning if buildcopy is used without any files to copy 2019-01-25 12:25:28 +00:00
Thomas Nagy e641f171be
Use .pipelines/Jenkinsfile instead of demos/wscript 2019-01-22 08:08:55 +01:00
Thomas Nagy a827a73af6
Add a pipelines file 2019-01-21 07:30:19 +01:00
ita1024 389e2e4a4b Merge branch 'protoc_gen_java_poc' into 'master'
protoc: simplify the java generation also solving problems with .proto input files generated during build

See merge request ita1024/waf!2209
2019-01-20 10:41:51 +00:00
Federico Pellegrin 429c4c88d9 protoc: simplify the java generation also solving problems with .proto input files generated during build 2019-01-20 10:41:51 +00:00
Thomas Nagy 2f3d5e5163
Prevent protoc errors on "waf list" 2019-01-19 09:40:11 +01:00
Thomas Nagy 3bf0e7049b
Remove xrange in one example 2019-01-18 18:48:26 +01:00
ita1024 17e973a7d3 Merge branch 'protoc_java_fname_1' into 'master'
protoc: fix filename generation for .java

See merge request ita1024/waf!2208
2019-01-17 18:07:10 +00:00
fedepell f876a7b18c protoc: fix filename generation for .java 2019-01-17 14:45:40 +01:00
Thomas Nagy 68997828c8
Fix a few deprecation warnings 2019-01-16 06:51:14 +01:00
Thomas Nagy 1c75284614
docs 2019-01-05 16:20:45 +01:00
Thomas Nagy 4bd0c72809
Rework the previous changes 2019-01-05 16:16:48 +01:00
ita1024 ab24e0041e Merge branch 'fix-invalid-seq-warnings' into 'master'
Fix all DeprecationWarning: invalid escape sequence

See merge request ita1024/waf!2207
2019-01-05 15:07:58 +00:00
Mickaël Schoentgen 412a9b819e Fix all DeprecationWarning: invalid escape sequence
Signed-off-by: Mickaël Schoentgen <contact@tiger-222.fr>
2019-01-05 12:02:42 +01:00
ita1024 e68dc88857 Merge branch 'cython' into 'master'
Cython enhancements

See merge request ita1024/waf!2196
2018-12-29 10:11:19 +00:00
Thomas Nagy 353ffefa21
waf-2.0.14 2018-12-23 12:12:15 +01:00
Thomas Nagy 907519cab9
waf-2.0.14 2018-12-23 11:52:46 +01:00
ita1024 a77deaebdb Merge branch 'features/fc_submodules' into 'master'
Support for Fortran 2008 submodules.

See merge request ita1024/waf!2205
2018-12-22 00:14:42 +00:00
Harald Klimach 24ea24ff24 Added more syntactic cases to the demos/fortran/submodules example.
Also build a main program that uses the parent module.
2018-12-21 23:36:55 +01:00
Harald Klimach 9ff9eb73ad Added submodules demonstrator to demos/fortran.
Its only built if gfortran is used at least with version 6.
2018-12-21 23:14:19 +01:00
Harald Klimach e0254f7a75 Missing bracket in submodule appending of fc_scan. 2018-12-21 23:13:35 +01:00
Harald Klimach 3dbf2ee7f8 Support for the Fortran Compiler of the NEC SX-Aurora TSUBASA system. 2018-12-21 20:18:12 +01:00
Harald Klimach e77a6561a1 Support for Fortran 2008 submodules. 2018-12-21 19:53:12 +01:00
Thomas Nagy 3d1744151f
Possible solution for Msys path issues #2217 2018-12-21 11:47:51 +01:00
Thomas Nagy b1928ee46b
Let the protoc demo build even if java is missing 2018-12-21 11:10:57 +01:00
fedepell 70f1522fa1 protoc: handle extra taskgen and out of project include directories 2018-12-21 06:16:08 +01:00
ita1024 b755748c4c Merge branch 'features/gccdeps' into 'master'
Use correct variable in gccdeps config

See merge request ita1024/waf!2203
2018-12-19 17:56:00 +00:00
ita1024 fe873242bc Merge branch 'protoc-eh-1' into 'master'
protoc: fix included protoc search on nested wscripts

See merge request ita1024/waf!2202
2018-12-19 17:44:23 +00:00
Daniel Welty 4b905773ea Use correct variable in gccdeps config
The global value gccdeps was appended to CFLAGS and CXXFLAGS instead of
the actual flags tested against the compiler.  This ignored
modifications to the GCCDEPS_FLAGS environment variable and complicated
adding support for additional compilers at the project level.
2018-12-19 11:14:43 -06:00
fedepell ba1947b113 protoc: fix included protoc search on nested wscripts
previously code was erroneously using tg.bld.path instead of tg.path
so for nested wscript calls the wrong directory was used in search.

added also better error handling with error message if an included
directory does not exist
2018-12-19 15:45:48 +01:00
Thomas Nagy 82679503eb
docs 2018-12-19 11:30:45 +01:00
Thomas Nagy 4fd4de389c
Fix the api documentation build 2018-12-15 19:45:47 +01:00
ita1024 6417d5129d Merge branch 'javaw-docs' into 'master'
javaw: add some documentation on tool usage

See merge request ita1024/waf!2200
2018-12-14 06:40:49 +00:00
fedepell 9cd14427c1 javaw: add possibility to enable recurse use also globally via env variable 2018-12-14 05:50:27 +01:00
James Harris 69bac69b5a ccroot.py: add skip_stlib_deps feature 2018-12-13 22:30:54 +00:00
fedepell ce8d103cf4 javaw: add some documentation on tool usage 2018-12-13 16:00:17 +01:00
fedepell 37a36eabf2 javaw: add recursive use processing if recurse_use=True 2018-12-12 07:07:17 +01:00
Thomas Nagy ee719f1912 Improve the cuda example #2212 2018-12-07 07:57:43 +01:00
Thomas Nagy 1c7be35dc0
Fix broken cPython: md5.digest() is not supposed to raise exceptions #2213 2018-12-06 07:44:36 +01:00
Thomas Nagy 753b153631
Provide a better Cuda example #2212 2018-12-05 20:49:40 +01:00
Thomas Nagy bd15a9dce7
Try to load sha1 if md5 is unavailable
Also, the minimum version of Python required is 2.5, so hashlib is always present.
2018-12-05 20:35:19 +01:00
Thomas Nagy f70b5d062e
waf-2.0.13 2018-12-03 15:46:09 +01:00
Nicolas Pauss dede827db2 cython: add 'from cpython.version cimport PY_VERSION' example in playground.
This test the latest improvement of the regex in cython extra.
2018-12-03 09:51:47 +01:00
Romain Le Godais b367410172 playground/cython: Update cython cache files.
The cache was generated with an old cython version (0.15.1). Update it by
generating it with a more recent version (0.29).
2018-12-03 09:46:47 +01:00
Thomas Nagy 1607738e97
Fix the extra message "Broken revdeps" that may appear on certain build failures 2018-11-27 07:55:49 +01:00
Thomas Nagy 7d3c89e1b0
Print PriorityTasks contents 2018-11-27 07:42:34 +01:00
Romain Le Godais b3d974a0b9 cython: use a set for mods instead of a list.
There can be multiple imports of the same module in a single file, so
avoid evaluating them multiple times.
2018-11-24 12:59:35 +01:00
Thomas Nagy d7e701e4eb
Keep running configuration tests with parallel jobs
Passing "-j1" to "waf configure" already sets the maximum amount of jobs to 1,
so the change in a2105efc6f
is deemed unnecessary.
2018-11-21 22:01:20 +01:00
Romain Le Godais e1981e936f md5_tstamp: Fix documentation.
According to the code, file size is not taken into account to know is the
hash should be recomputed.
2018-11-21 15:02:58 +01:00
Thomas Nagy d02a15ae47
Always define the attribute "spawner" a2105efc6f 2018-11-18 11:52:34 +01:00
Romain Le Godais af74bbcbee cython: Enhance import regexp.
* avoid matching commented imports
* support `from foo.bar import baz` syntax.
2018-11-18 10:39:17 +01:00
Romain Le Godais 895191b5c4 Configure: Fix bug when build directory creation fails.
Seen thanks to pylint.
2018-11-18 09:32:39 +01:00
Stefan Metzmacher a2105efc6f Fixes for broken python threading on AIX 2018-11-18 01:03:16 +00:00
Romain Le Godais e74760c666 Fix description of `before` and `after` attributes of Task class.
Their descriptions were actually the opposite of what they really are.
2018-11-15 10:22:39 +01:00
Romain Le Godais b647ae76b2 Fix TaskGen idx attribution when 'path' argument is given.
When the 'path' argument was given at TaskGen creation, it was not taken
into account for attributing idx (the path of the build context was).

This is an issue when creating task generators from a waf tool because
their idxs were attributed as if they were in the project root directory,
even if another path was specified, which could lead to output files
collisions.
2018-11-11 14:32:22 +01:00
Adriano Scoditti 4611188e90 Restore original launch_dir on autoconfigure to correctly parse cli options 2018-11-06 18:16:18 +01:00
Thomas Nagy 314bd31e6a
Find more Swig dependencies - Issue 2206 2018-11-06 00:20:31 +01:00
Adriano Scoditti 9923a2e22e Removes hard-coded 'c4che' references using 'Build.CACHE_DIR' instead 2018-10-30 12:00:48 +01:00
Eric Müller 1efa74d38a Append python-config output only once 2018-10-23 12:38:41 +02:00
Thomas Nagy 88e9382f1b
waf-2.0.12 2018-10-07 20:05:42 +02:00
Thomas Nagy fc59ca785d
Limit sig_vars calls to super() to fix #2194 2018-10-03 21:28:42 +02:00
Adriano Scoditti 9f523216ea Update waf_unit_test command logging to be compatible with 'WAF_CMD_FORMAT' 2018-10-03 17:34:08 +02:00
Thomas Nagy fab68b4b8c
Remove the exception raised by tests/install/wscript 2018-09-27 19:25:36 +02:00
Thomas Nagy d63e32633d
Add tests for #2184 2018-09-25 18:05:10 +02:00
jadoro 72ba2cff1e Interpret relative install paths relative to PREFIX 2018-09-25 13:24:51 +02:00
Thomas Nagy fe03c6fa47
waf-2.0.11 2018-09-02 02:36:14 +02:00
Thomas Nagy a97f6fb094
Do not raise an exception on check_cfg/mandatory=False/-vv #2193 2018-08-28 23:37:48 +02:00
Thomas Nagy f09a1c56ca
Fix #2191 2018-08-24 22:41:05 +02:00
mmooij 02c20b8e85 Check if sources/include are Nonde3 type 2018-08-21 17:52:09 +02:00
Thomas Nagy 57fc628d2b
Disable warnings on versioned library installation 2018-08-16 23:30:59 +02:00
Thomas Nagy 922186f7a8 docs 2018-08-16 23:30:05 +02:00
Daniel Bartel ef90934434 spawn a subprocess for cpplint to avoid threading issue 2018-08-10 23:49:52 +02:00
Thomas Nagy 04e1b65ecb
waf-2.0.10 2018-07-29 13:24:16 +02:00
Thomas Nagy 31a5fa3829
Rework 3e06a0b9a2 2018-07-29 13:19:59 +02:00
Thomas Nagy 3f4acd6ff3
Add a new task semaphore system 2018-07-29 12:13:54 +02:00
Matt Selsky a10822f688 Fix typos 2018-07-28 19:47:10 -04:00
Thomas Nagy 3fc8c8c68a
Fix deadlocks affecting generated Fortran files #2187 2018-07-28 10:27:54 +02:00
Thomas Nagy 3e06a0b9a2
Fix --help when no wscript is supplied #2184 2018-07-27 11:17:06 +02:00
Thomas Nagy c543921e7d
waf-2.0.9 2018-07-09 16:43:40 +02:00
ita1024 8a950e7bca Merge branch 'add-python3-to-gitignore' into 'master'
Ignore temporary directories created when using Python 3

See merge request ita1024/waf!2179
2018-07-08 19:52:18 +00:00
Matt Selsky 8bd5adf041 Ignore temporary directories created when using Python 3 2018-07-08 14:58:47 -04:00
Matt Selsky 12b9f9aed1 Update GitHub URLs for GitLab equivalents 2018-07-08 14:53:13 -04:00
Thomas Nagy 1de8d03fb2
docs 2018-07-04 07:41:12 +02:00
Thomas Nagy 1f5e3e2d6c
Fix a regression caused by the previous change 2018-07-03 07:53:19 +02:00
Thomas Nagy 1787ec1f20
Add dependencies on scriptlet outputs 2018-07-02 19:15:09 +02:00
Jonathan Bendes 4b6ea4c7e8 Made options optional for cython waftool 2018-06-27 07:22:10 +02:00
fedepell 80aba755c1 doxygen: make error management if doxygen configuration file not found a bit more user friendly 2018-06-06 23:39:32 +02:00
fedepell 8b4d979dad doxygen: task_gen has no attribute generator, correct reference and make error message a bit more readable 2018-06-06 23:39:32 +02:00
Matt Selsky efea0378fd python docs: check_python_version also defines PYTHONARCHDIR 2018-05-24 18:02:03 +02:00
Thomas Nagy 656a30d364
waf-2.0.8 2018-05-22 23:07:04 +02:00
Thomas Nagy f78fbc32bb
Simplifications 2018-05-19 11:30:05 +02:00
Thomas Nagy 6873a1b4c6
Work around Python 3.6 console issues #2163 2018-05-19 11:23:46 +02:00
Mark Flanagan 5faa15a9f3 Don't quote or escape arg file lines for moc/rcc
Qt parses each argument line-by-line. Avoiding the quoting and escaping
from Task.quote_flag saves us from "too many files specified" moc/rcc error.
2018-05-17 00:00:49 +02:00
Federico Pellegrin 2a18ea239a eclipse: make all generated file utf-8 encoded (#2166)
Eclipse generates them by default in utf-8 (or will resave them
as such the moment they are touched) so this is more conformant
to eclipse format.
2018-05-11 16:13:06 +02:00
fedepell 974e4d0d0b eclipse: give a better name to waf variable indicating the waf executable path 2018-05-11 13:45:09 +02:00
Federico Pellegrin 48a4f6a765 eclipse: generate an external builder when no CDT is used in the project (#2164)
When CDT is not included in the project (ie. we just have Python and/or Java) the current implementation would not create automatically a call to waf
for the build stage. This patch adds in such cases an external builder that automates the call to waf without the need to manually configure one.
2018-05-11 12:16:04 +02:00
fedepell 30b883a32d eclipse: add generation of external jar dependencies for java projects to eclipse file 2018-05-09 22:37:58 +02:00
Thomas Nagy 55d975f25e
Fix the API docs 2018-05-09 07:23:37 +02:00
Thomas Nagy 8e40c98e0c
Docs: mention PYTHONIOENCODING for windows console users 2018-05-09 07:17:42 +02:00
Thomas Nagy 7bc3f787b2
Rework the vswhere.exe execution
- Do not shadow the encoding parameter for subprocess.Popen in Python 3.6
- Describe console settings
- Import ctypes only if available
2018-05-08 23:46:01 +02:00
Suzumizaki c2980e5090 Adhoc fix where waf cannot run under Japanese version of Windows. (#2155) 2018-05-08 22:55:19 +02:00
fedepell 64a582ecc2 eclipse: add support for generated files management for java and python
added support to search and add into source path also generated source
files for both java and python. this is useful when using generated code
(ie. protoc and pyqt5) so browsing in eclipse works correclty adding also
paths where generated code is done.

extended example in playground demostrating generated code
2018-04-22 00:40:28 +02:00
fedepell c4f8e20e69 pyqt5: improve the sample in playground so can easily work also with pyside2 2018-04-18 08:05:07 +02:00
fedepell 4682f543ce eclipse: handle case where python install_from is a Node object 2018-04-17 07:20:20 +02:00
fedepell 891f3e809d eclipse: correct feature name to javac not java
it was actually working anyway if the features were passed as a string (as in the playground example) but not if passed as a list
2018-04-16 18:45:43 +02:00
Thomas Nagy f8c86e0895
Provide the 'def:' string through a variable #2148 2018-04-14 08:39:27 +02:00
Thomas Nagy bef6f1b4bf
Cleanup #2146 2018-04-07 10:35:07 +02:00
Eric Newberry fab94287f8 detect arch-specific library path for Boost on dpkg-based systems 2018-04-07 10:34:09 +02:00
fedepell 6363147a5e java demos: correct jaropts parameter example to an array as it is then used as such in javaw.py 2018-04-04 20:29:37 +02:00
voodoo66 f03040c960 fixed typo in documentation for Configure.find_program 2018-04-02 20:27:53 +02:00
Thomas Nagy 8abce6ddd3
docs 2018-04-02 12:06:54 +02:00
Thomas Nagy 9cf12afa62
docs 2018-04-01 23:31:45 +02:00
Thomas Nagy 4a71fef6f1
Missing code 2018-03-29 16:49:50 +02:00
Thomas Nagy 465a1c7b5c
waf-2.0.7 2018-03-29 15:00:58 +02:00
Daniel Vollmer a4b0b675cf swig: c(xx) task inherits weight from swig itself
If any weights (i.e. `weight` or `tree_weight`) are set on a swig task
then those weights are passed on to the task created to compile the
wrapper generated by swig.
2018-03-29 13:24:54 +02:00
Thomas Nagy c80722685c
Apply priorities when consuming tasks - Issue 2137 2018-03-29 11:09:39 +02:00
Thomas Nagy 90c80ea1ae
Apply priorities on dynamically-generated tasks #2137 2018-03-27 20:32:53 +02:00
Thomas Nagy 592136739b
Improve priority support in swig.py 2018-03-26 21:03:26 +02:00
Thomas Nagy 259b5468b8
Workaround for Swig priorities #2137 2018-03-26 20:52:11 +02:00
Thomas Nagy 2c640d8803
The cxx_hook override in slow_qt4 is missing a return bloack 2018-03-25 18:39:52 +02:00
fedepell bb458769ee protoc: add .proto dependencies also in include path otherwise protoc will fail if dependency is in another directory 2018-03-22 23:13:40 +01:00
Thomas Nagy 8404aa4d5c
Cosmetic changes on the gdbus/dbus tools 2018-03-21 23:56:48 +01:00
Thomas Nagy b806fe31d9
Moved gdbus to the playground area 2018-03-21 23:53:18 +01:00
Joshua Watt 922604492a gdbus: Add glib DBus bindings
Adds support for generating dbus bindings using the newer gdbus-codegen
tool that is designed to replace the deprecated dbus-binding-tool tool
2018-03-21 23:51:55 +01:00
Thomas Nagy facdc0b173
Python 3.7 fixes #2126 2018-03-12 20:42:55 +01:00
Thomas Nagy de992ea840
Enable Utils.lazy_generator in Python 2 2018-03-11 22:42:21 +01:00
Fangrui Song 5e4b86b81d Use "arguments" instead of "command" for compile_commands.json 2018-03-11 21:54:35 +01:00
fedepell adbee3f23a protoc: protoc (ver 2 and 3) strips underscores when generating .java file names. consider this in node name generation otherwise the generated java file will not be found 2018-03-09 17:39:55 +01:00
Alexander Afanasyev 9e2da12800 Correction of boost module detection of Boost.Log
The previous logic in #1709 made an incorrect assumption that the
filename of shared/static library indicates that it was build as
multi-threaded or single threaded. This assumption does not hold in many
Linux distributions.

In addition to that. Boost.Thread and Boost.Log require -pthread (or
some other) flags in order to properly link.
2018-03-09 08:49:42 +01:00
Alexander Afanasyev 4c79d0dda4 Fix strangle issue with precompiled headers and shared libraries
When shared library compiled with precompiled headers enabled, this
change prevents precompiled headers to activate on dependent targets.
Otherwise, there is an issue with -fPIC flag propagation.
2018-03-09 08:48:24 +01:00
Andrew Keller d525e2ccac xcode6: fix py3 support 2018-03-08 09:38:59 +01:00
Matt Selsky 28ea6e64e3 Typos 2018-03-06 09:14:40 +01:00
fedepell e9eca13d92 protoc: fix generation of include directories when having nested wscripts 2018-03-06 09:14:10 +01:00
fedepell a02c6d8727 protoc: handle case of proto files in deep directories when output is generated with paths 2018-03-02 19:33:38 +01:00
Thomas Nagy 459ddf50b6
waf-2.0.6 2018-02-18 13:24:13 +01:00
Thomas Nagy ae907a859e
Provide an example of storage using extended filesystem attributes 2018-02-17 22:35:52 +01:00
Thomas Nagy 1a43b608ac
Enable deep input dependencies as a task decorator 2018-02-17 18:40:29 +01:00
Thomas Nagy 941fcc05e0
docs 2018-02-17 12:14:03 +01:00
Thomas Nagy 511b8b7d4d
Apidocs cleanup 2018-02-14 21:28:41 +01:00
Thomas Nagy a7546a2d22
Fix Python 3 encoding for unit tests #2108 2018-02-14 21:06:48 +01:00
Thomas Nagy 43039e716b
Fix the apidocs LaTeX paper size parameter 2018-02-14 21:02:43 +01:00
Thomas Nagy 6b99cbfce2
waf-2.0.5 2018-02-10 20:50:13 +01:00
fedepell 102b85a466 cuda.py: insert a space after -o as by documentation otherwise it will not work
not sure if in very old nvcc version this was working anyway but as far as I can read on the documentation this should be the correct way and I tested it out
2018-01-31 20:34:36 +01:00
fedepell 23beecebf3 javaw: raise a build fatal error if manifest file not existing instead of crashing 2018-01-24 21:00:13 +01:00
Thomas Nagy deacb94c93
Force unit tests to depend on the executable creation time 2018-01-24 20:56:40 +01:00
Thomas Nagy acc10c17a8
Update the documentation to recent python-sphinx versions 2018-01-22 19:27:28 +01:00
fedepell 0c07d0d7fb eclipse: don't rely on Context.g_module.out as it may not be defined if default used, used bldnode instead 2018-01-19 00:40:00 +01:00
fedepell daa0c135e1 eclipse.py: support also if passed srcdir is a Node or a list of directories (which are valid inputs for javaw.py) 2018-01-19 00:40:00 +01:00
Thomas Nagy d21446ff71
Update docs for 2018 2018-01-01 20:53:49 +01:00
Thomas Nagy 7b36a52b4e
waf-2.0.4 2017-12-30 10:36:51 +01:00
Thomas Nagy 5996879673 Enable more advanced warnings of ant_glob on build folders in verbose mode 2017-12-23 20:36:14 +01:00
Thomas Nagy cd07df4a85 Mention the python requirement in the tutorial 2017-12-23 15:10:34 +01:00
Thomas Nagy 2f27d6f52c Enable 'waf clean' to get the list of files to remove from bld.clean_files 2017-12-23 15:05:29 +01:00
Thomas Nagy c0e2e7f281 Defer node.ant_glob(..., generator=True) evaluation 2017-12-23 14:56:54 +01:00
Thomas Nagy 955e10291d Define the environment variable WAF_NO_PREFORK to skip pre-forking 2017-12-22 15:40:06 +01:00
Thomas Nagy aa361ee568 Fix Can't pickle local object '_createenviron.<locals>.encode' exceptions (Python 3.6) 2017-12-22 14:59:31 +01:00
Thomas Nagy d35cd0cf12 Improve the Erlang module #2095 2017-12-20 00:13:47 +01:00
Przemyslaw Rzepecki 69157c7b68 Udated Erlang support.
This adds a scaner method to track Erlang heders dependencies.
Support for EUnit tests
Support for EDocs
Support for ERL, ERLC, ERLC_FLAGS environment settings.
2017-12-19 22:03:41 +01:00
danbar fdf22b24c8 fix whitespaces 2017-12-19 16:27:15 +01:00
danbar 3dc4357ada use interface function of cpplint module 2017-12-19 16:27:15 +01:00
Thomas Nagy ca6fe005ef
Cosmetic changes 2017-12-13 22:09:12 +01:00
Przemyslaw Rzepecki c06a19b9d2 Added task target to output of parallel_debug.
Without the task name/target it is not obvious which steps in the build take
the most time.

Tested the SVG output with Firefox 52.
2017-12-13 22:06:22 +01:00
Thomas Nagy bda66f00c3
docs 2017-12-10 21:43:38 +01:00
Thomas Nagy 9effdff4c3
docs 2017-12-10 21:35:53 +01:00
Thomas Nagy f5f4218cda
Set task.stdout=task.stderr for long-running tasks 2017-12-10 21:27:09 +01:00
fedepell a6614586c7 javaw: skip adding empty entries in CLASSPATH 2017-12-04 20:14:55 +01:00
Matt Selsky f8f4f74403 Fix waf_unit_test class name 2017-12-03 10:03:24 +01:00
Thomas Nagy 2a4c4f0b66
Preparations for waf 2.0.3 2017-12-02 09:43:01 +01:00
Thomas Nagy 6a80016ad5
Warn for typo uses -> use 2017-12-02 09:39:51 +01:00
Thomas Nagy 05188b4c7f
Enable install_path=None for Python targets #2087 2017-12-02 09:26:17 +01:00
Thomas Nagy a5a3915b7a
Prevent duplicate paths when adding from user classpath #2084 2017-11-30 19:55:48 +01:00
Calle Rosenquist 384e8d85ba buildcopy: Create destination directories as needed. 2017-11-30 19:09:56 +01:00
Matt Selsky c98f8ba2ab Typos 2017-11-28 20:22:10 +01:00
Thomas Nagy 52a61c45e8
Docstring pytask -> pyc/pyo 2017-11-27 19:35:59 +01:00
Thomas Nagy 1f8eee88af
Remove subsystem cflags because those have no effect 2017-11-23 07:50:48 +01:00
Calle Rosenquist f336f0bf62 pytest: Improved documentation, removed assumption on Python only
dep-nodes and locality of link task outputs always in build.
2017-11-20 22:04:35 +01:00
Van de Bugger f4dca02af6 Unit test summary color scheme fixed to use green and red colors
Red color is used for failed tests, green color is used for passed
tests.
2017-11-12 11:35:04 +01:00
Thomas Nagy 96f4eec8ba Improve the deadlock error message 2017-11-11 10:34:04 +01:00
fedepell 731afed564 report from load_tool the used sys.path in ImportError so it can notified to the user correctly 2017-11-09 08:26:35 +01:00
fedepell eb6c205ad1 Revert "fix load_tool error messages and cover all occourences"
This reverts commit 0557256db454a6ab98e4b909be8fd5db9bbb49c2.

The solution is not viable for API change, let's remove this.
2017-11-09 08:26:35 +01:00
fedepell 5d3576af45 fix load_tool error messages and cover all occourences
When a tool cannot be loaded the wrong path was displayed on the error
message. sys.path was always displayed but the actual path used depends
on tooldir being passed and on the value of with_sys_path parameter.

I put the exception handling (raising the fatal) inside load_tool itself
as this is the only place where the exact path is known, without having
to recalculate it outside. To be able to use fatal there also the ctx
has to be passed from the various points.

In this way all load_tool exceptions are caught and reported, while before
an exception during configure was not caught for example, just during the
options.
2017-11-09 08:26:35 +01:00
fedepell 7d00ca7266 qt5: make also uic->h conversion parallel safe, assuming that all transformations are equal 2017-11-03 20:49:49 +01:00
Thomas Nagy 7d62fa411a
waf-2.0.2 2017-10-23 14:48:00 +02:00
DragoonX6 b1efcfa6ab Change DEST_OS to use underscores in order to find a correct gcc_modifier_ function. 2017-10-23 14:03:47 +02:00
Thomas Nagy 230096c378
Remove extra parenthesis in qt5.py 2017-10-23 13:59:20 +02:00
Thomas Nagy e6bd4c6609
Add --dnotooltip to parallel_debug for tooltip-free images 2017-10-23 13:55:04 +02:00
fedepell f5aa701f1f qt5: resolve concurrency issues when files such as qm and qrc are used by multiple build tasks 2017-10-23 13:51:45 +02:00
Thomas Nagy 4d481ab179
waf-2.0.2 2017-10-22 10:39:32 +02:00
Thomas Nagy f67d5309f1
Adjust the GAP for tasks from 20*njobs to 5*njobs 2017-10-21 23:21:29 +02:00
Thomas Nagy 40fe56abcd
Have the task count start at 1 (regression) 2017-10-20 20:25:24 +02:00
Thomas Nagy 002c1fa094
Move gather_wsdk_versions after the definition of 'target_compiler' 2017-10-20 20:15:16 +02:00
Thomas Nagy 2928db1c8c
Let ConfigurationContext.load description match more closely Context.load 2017-10-20 20:07:29 +02:00
Thomas Nagy ec356383e2
object.__getattr__ -> object.__getattribute__ 2017-10-20 20:05:06 +02:00
fedepell ffe88abe80 javatest: extra to integrate java unit testing into standard waf_unit_test environment 2017-10-19 08:28:53 +02:00
Matt Selsky 06f0390992 Typos 2017-10-19 08:27:57 +02:00
Schildkroete23 bef2cf13ec Use correct batch filed and function for Intel Fortran detection on Windows. (#2063) 2017-10-19 08:27:37 +02:00
Thomas Nagy 0be92e74ac
Cosmetic changes for #2055 2017-10-18 21:06:12 +02:00
Roland Puntaier 34e6fd922a Use DEST_OS in cfg_cross_gnu (#2055)
* use DEST_OS in cfg_cross_gnu
* add an example
* rename cfg_cross_gnu to cross_gnu
* add configure()
* xcheck_envar -> xcheck_var
* xcheck_var to look in environ only if not already set
2017-10-18 20:54:12 +02:00
Daniel Petró 3010e6a2c3 Fix for Intel Fortran Detection on Windows. 2017-10-17 19:19:15 +02:00
Sean Fisk 21d659b841 Fix incorrect documentation for cmd_and_log 2017-10-17 02:00:13 +02:00
Thomas Nagy 6d18a0e760
Update check_waf_version default bounds 2017-10-11 21:59:29 +02:00
Thomas Nagy 210874d297
Fix #2053 2017-10-04 20:41:21 +02:00
Roland Puntaier 2bbd4b62d5 normpath() to make a 'a/b' variant dir display as 'a\b' on windows 2017-09-30 21:33:41 +02:00
Thomas Nagy 3d64c32c2c
Do not expose the pdb option by default 2017-09-30 21:31:07 +02:00
Roland Puntaier 314240fec9 --pdb option to start pdb on exception 2017-09-30 21:28:55 +02:00
Federico Pellegrin a02b71a163 protoc: add java support for protobuffers (#2049)
* protoc: added java support

Modified protoc to support also .proto -> .java generation. the .java file
name generated is not obvious as in C++/Python but follows a couple of rules
that were implemented.

As cxx/python and javaw Tools are quite different the implementation is not
as clean as for cxx/python but is hopefully fine (ie. protoc still uses
sources for input files while javac uses src_dir).

In javaw a small detail was added: a new attribute was added (gencode) that
instructs javac to look for source files also in the build directory. This
are realistically generated code (and .proto -> .java is an example) and
are therefore in the build. Default is false keeping all the previous
behaviour.

* protoc for java enhanchments (protoc version, regex, docs)

In configure stage get protoc version as java naming changes depending on the
version. Implement the version differences between version < 2 and > 2

Improve regex for option catching and implement a mix of them in playground
to verify it.

Add some documentation on how java filenames and paths are generated.

* protoc: build dir with generated code is automatically added, so no need to explicitly use gencode in javac
2017-09-26 19:17:40 +02:00
Thomas Nagy dc6d584002
waf-2.0.1 2017-09-24 17:23:48 +02:00
Thomas Nagy 8134aed186
docs 2017-09-23 09:44:28 +02:00
Alan Ray 1e994e50fb Teach use_config to more gracefully fail during options() call #2043 2017-09-23 09:22:35 +02:00
Thomas Nagy f7833e73ff
Remove unnecessary global declarations 2017-09-23 09:22:24 +02:00
Calle Rosenquist 89c755e714 pytest: Also add in-source library dependencies to libpath. buildcopy: Renamed to_nodes to to_src_nodes to avoid any confusion. 2017-09-23 09:22:16 +02:00
Daniel Brosche 6e44206a67 Cleaned up extended use example 2017-09-23 09:22:05 +02:00
Thomas Nagy c26f8c12c2
Accept task objects in Build.add_to_group for compatibility reasons 2017-09-23 09:21:51 +02:00
Thomas Nagy c113442738
Prevent xcode6 from overwriting features lists #2038 2017-09-23 09:21:41 +02:00
Thomas Nagy 31d32c3f49
Improve default preprocessor behaviour for gcc/msvc 2017-09-23 09:21:21 +02:00
Thomas Nagy e64467892c
Warn against loading gccdeps/msvcdeps options 2017-09-23 09:21:14 +02:00
Thomas Nagy b78ecf361c
Fix #2035 2017-09-23 09:21:04 +02:00
Daniel Brosche 54248f007b Extended playground use example 2017-09-21 07:26:54 +02:00
Thomas Nagy 4272c6b5ba
self.includes may come from a global variable #2035 2017-09-20 20:01:46 +02:00
Thomas Nagy 18955dd91d
Attempt to make the syms tool a little more backward-compatible #2032 2017-09-20 00:06:50 +02:00
Calle Rosenquist 69e45d1a71 Node.ant_glob: Do not ignore case by default, as specified by the documentation. 2017-09-19 22:46:16 +02:00
Calle Rosenquist 1354a37255 Set Logs.verbose from options (regression from be05b6ee8b) 2017-09-19 15:29:29 +02:00
Thomas Nagy 74204e57e0
waf-2.0.0 2017-09-16 20:34:02 +02:00
Thomas Nagy 0279838cfd
Simplify tests/init execution 2017-09-16 14:02:09 +02:00
Thomas Nagy 934b02f967
Merge branch 'waf-2.0' into master 2017-09-15 21:27:31 +02:00
fedepell 5cc784aabd correct the documentation example for colon 2017-09-15 21:06:52 +02:00
fedepell 0976fd1679 correct the documentation example for colon 2017-09-15 21:06:07 +02:00
Thomas Nagy 4e387de1ce
Follow-up on #2028 2017-09-15 21:00:15 +02:00
Federico Pellegrin 4df813941e protoc: extend extra to support also Python language (#2028)
* protoc: extend extra to support also Python language
* protoc: fix ext_out, unite c++/python generation, fix protoc_includes name
2017-09-15 21:00:08 +02:00
Thomas Nagy e40e52a383
Follow-up on #2028 2017-09-15 20:59:37 +02:00
Federico Pellegrin 2474218874 protoc: extend extra to support also Python language (#2028)
* protoc: extend extra to support also Python language
* protoc: fix ext_out, unite c++/python generation, fix protoc_includes name
2017-09-15 20:52:08 +02:00
Thomas Nagy da3844b019
Obtain vala tasks directly 2017-09-14 22:47:27 +02:00
Thomas Nagy e68bc5d65b
docs 2017-09-14 22:20:31 +02:00
Thomas Nagy ddbc9726b0
Fixup: read the relevant lock file with --top 2017-09-12 20:22:13 +02:00
Adriano Scoditti f0c8b0c283 When '--top' is specified there is no reason to climb 2017-09-12 20:20:22 +02:00
Thomas Nagy a61742affb
Add tests for #2026 2017-09-12 20:11:36 +02:00
Thomas Nagy ad5dd18408
Use the 'with' syntax whenever possible 2017-09-12 19:36:43 +02:00
Thomas Nagy 0a0b786259
docs 2017-09-12 19:11:34 +02:00
Thomas Nagy dcefc468bb
Python3 fixes 2017-09-10 20:59:59 +02:00
Thomas Nagy be05b6ee8b
Accept relative prefix/bindir/libdir paths from launch_dir
Additionally:
- Scripting.parse_options is back for compatibility reasons
- The help message should only be displayed when this is intended
- OptionsContext is responsible for the full initialization, so
  the framework should be usable without requiring Scripting.py
- Make it clear that Options.options is an optparse.Values object
- Get rid of the state in Options.options
2017-09-10 20:59:29 +02:00
Thomas Nagy 8b49da2fa7
Add more folder initialization tests 2017-09-10 19:14:40 +02:00
Adriano Scoditti 3cea04e829 Improve options management 2017-09-10 19:11:27 +02:00
Thomas Nagy 7f7f336e9f
Fix Configure.autoconfig='clobber' when no previous configuration is present 2017-09-09 17:50:42 +02:00
Thomas Nagy b722f1dda0
Test suite for top/out settings 2017-09-09 17:50:13 +02:00
Thomas Nagy 8c3a281746
Fix Configure.autoconfig='clobber' when no previous configuration is present 2017-09-09 17:49:48 +02:00
Thomas Nagy 5aafea1bd3
Test suite for top/out settings 2017-09-09 17:45:59 +02:00
Mihai Moldovan 4f0c7dc44a Backport old gfortran compiler support. 2017-09-05 07:58:46 +02:00
Mihai Moldovan 2706fdbec0 Backport old gfortran compiler support. 2017-09-05 07:58:21 +02:00
Thomas Nagy 96f6a6a22d
Remove an unused variable in buildcopy 2017-09-04 21:19:20 +02:00
Thomas Nagy 82df9d14fd
Remove an unused variable in buildcopy 2017-09-04 21:18:41 +02:00
Calle Rosenquist 82fd4054a7 pytest: Added better support for normal and pyext library dependencies.
This also includes the `buildcopy` feature that allows construction of complete Python packages in the build dir.
2017-09-04 21:08:10 +02:00
Karl Linden 01e017cfc2 Make unit testing interpreted scripts work. 2017-09-04 21:07:20 +02:00
Calle Rosenquist f043a94a02 pytest: Added better support for normal and pyext library dependencies.
This also includes the `buildcopy` feature that allows construction of complete Python packages in the build dir.
2017-09-04 21:03:55 +02:00
Thomas Nagy 53af0cfaef
Remove unused traceback import 2017-09-02 23:34:58 +02:00
Thomas Nagy b5408091b3
Cleanup unused global statements 2017-09-02 23:34:15 +02:00
captainmalloc 5d4cd9e13c Default ignore Vim swap and Python Compiled files (#2020)
* Default ignore Vim swap and Python Compiled files

* Only Vim swap file accepted, removing Python compiled from default ignore
2017-08-31 20:25:18 +02:00
captainmalloc eae22121f6 Default ignore Vim swap and Python Compiled files (#2020)
* Default ignore Vim swap and Python Compiled files

* Only Vim swap file accepted, removing Python compiled from default ignore
2017-08-31 20:24:52 +02:00
Thomas Nagy d4bf3a70f0
Typo 2017-08-31 20:20:05 +02:00
Thomas Nagy d390d5a5ce
Typo 2017-08-31 20:19:31 +02:00
Adriano Scoditti fa1a44c115 Fix 'shell' attribute on waf_unit_test:exec_command() Popen call using the same logic defined in Context:exec_command() 2017-08-28 20:23:41 +02:00
Adriano Scoditti df6a8a0ac7 Fix 'shell' attribute on waf_unit_test:exec_command() Popen call using the same logic defined in Context:exec_command() 2017-08-28 20:22:46 +02:00
Adriano Scoditti 28594b3824 Fix Context.launch_dir init to point on user working directory 2017-08-28 20:13:13 +02:00
Adriano Scoditti 5f5f8eede5 Fix Context.launch_dir init to point on user working directory 2017-08-28 20:12:52 +02:00
Thomas Nagy 0520af4efb
Split unit test commands by shlex 2017-08-27 11:09:57 +02:00
Thomas Nagy 04e4d4ce2c
docs 2017-08-27 10:56:32 +02:00
Thomas Nagy ff0b65ff14
Split unit test commands by shlex 2017-08-27 10:56:06 +02:00
Thomas Nagy 755a1bf6a5
Simplify task error handling 2017-08-27 10:11:56 +02:00
Thomas Nagy c766224995
Docs 2017-08-27 01:00:33 +02:00
Thomas Nagy 5c15f6f39e
Prevent duplicates in c_preproc.py results 2017-08-26 12:24:22 +02:00
Thomas Nagy 5b935a1e6a
Optimize fast_partial.is_stale 2017-08-26 11:13:04 +02:00
Thomas Nagy b3e9ca89e6
Override the msvc linker through LINK_CXX 2017-08-25 20:23:16 +02:00
Thomas Nagy 0659657a8c
Remove old TODO notes 2017-08-25 20:22:46 +02:00
Thomas Nagy 762ed49464
Additional fixes for #2013 2017-08-19 13:22:15 +02:00
Thomas Nagy 4438aeadcb
Additional fixes for #2013 2017-08-19 12:58:40 +02:00
Thomas Nagy 57087471c1
Remove Utils.ex_stack - use traceback.format_exc() 2017-08-19 11:54:58 +02:00
Thomas Nagy d865bffd88
Change the .pickle file storage from waf 1.9 2017-08-19 10:21:40 +02:00
Thomas Nagy 8161991558
Update paths starting in waf-1.8.* 2017-08-19 10:15:23 +02:00
Thomas Nagy bfe1512a55
Exclude waf-2 folders in waf-2.0 2017-08-19 10:11:36 +02:00
Adriano Scoditti 0e06d4730e Add distclean compatibility with '--no-lock-in-top' command line option 2017-08-19 09:57:53 +02:00
Adriano Scoditti fc468105e9 Add distclean compatibility with '--no-lock-in-top' command line option 2017-08-18 18:22:08 +02:00
Roman C. Podolski d2f48b5d89 Fix protoc #2009
Fix bug described in #2009 and extend example in playground to include
described scenario.
2017-08-17 19:56:07 +02:00
Roman C. Podolski fc021cd060 Fix protoc #2009
Fix bug described in #2009 and extend example in playground to include
described scenario.
2017-08-17 07:50:28 +02:00
Thomas Nagy f8aa0d9da4
Update protoc #2009 2017-08-16 19:47:34 +02:00
Thomas Nagy c3fee6620c
Update protoc #2009 2017-08-16 19:45:03 +02:00
Thomas Nagy 03a3c604c4
Provide an example of build context sharding 2017-08-13 23:09:35 +02:00
Thomas Nagy 7874f8569f
Cache taskg_gen.idx by absolute path 2017-08-13 23:06:28 +02:00
Thomas Nagy 322f447e0a
Remove one Node class assumption in Task.py
Tasks cannot assume that additional dependency (deps_man) belong
to the same Node object class before obtaining their signatures
2017-08-13 09:03:54 +02:00
Thomas Nagy 28846d6f34
Remove one Node class assumption in Task.py
Tasks cannot assume that additional dependency (deps_man) belong
to the same Node object class before obtaining their signatures
2017-08-12 16:31:51 +02:00
Thomas Nagy 43d6363177 Re-enable the timestamp cache previously removed 2017-08-09 00:27:13 +02:00
Thomas Nagy e22390ee44
Obtain store timestamps in a dedicated structure 2017-08-08 22:21:54 +02:00
Thomas Nagy a28f9475f3 Fixup 2017-08-08 01:01:48 +02:00
Thomas Nagy dcc09cb0df
Obtain the exact wscript file path 2017-08-07 08:28:03 +02:00
Thomas Nagy 6ed9a9231f
Split fast_partial data storage from the main pickle file 2017-08-06 11:48:25 +02:00
Thomas Nagy ee3f706bb7
Encapsulate bld.producer.is_dirty behind an interface 2017-08-06 10:51:59 +02:00
Joshua Watt 174f66c523 syms: Improve symbol processing
The export symbol regular expression processing is updated to make
several improvements:
  * The export expression (export_symbols_regex) now applies to both
    functions and global variables
  * A named capture group is used to match symbols. This allows the
    export expression to contain capture groups without disrupting the
    expression matching
2017-08-05 23:17:54 +02:00
Thomas Nagy 194b6e85f5
docs 2017-08-05 23:17:27 +02:00
Thomas Nagy 1cade2ba13
docs 2017-08-05 23:15:50 +02:00
Joshua Watt 70e4c44080 syms: Improve symbol processing
The export symbol regular expression processing is updated to make
several improvements:
  * The export expression (export_symbols_regex) now applies to both
    functions and global variables
  * A named capture group is used to match symbols. This allows the
    export expression to contain capture groups without disrupting the
    expression matching
2017-08-03 08:23:43 +02:00
Thomas Nagy 6d96b245cc
Invalidate the cache if a file is missing in fast_partial 2017-08-02 20:05:00 +02:00
Thomas Nagy 24825b5575
waf-1.9.13 2017-08-02 19:46:33 +02:00
Thomas Nagy 66f1d5bc94
docs 2017-08-02 19:45:08 +02:00
Thomas Nagy 7003858752
Detect configuration changes 2017-08-02 01:23:32 +02:00
Thomas Nagy 5468e0031b
Typo process_uselib_vars -> propagate_uselib_vars #2005 2017-08-02 00:42:42 +02:00
Thomas Nagy f6eee2b041
Typo process_uselib_vars -> propagate_uselib_vars #2005 2017-08-02 00:38:11 +02:00
Simon fe1bb1b58a Fixed a crash when building a subset of xcode6 targets
E.g. when running 'waf xcode6 --targets=some-target'

  File "/waf/waflib/Scripting.py", line 167, in waf_entry_point
    run_commands()
  File "/waf/waflib/Scripting.py", line 268, in run_commands
    ctx = run_command(cmd_name)
  File "/waf/waflib/Scripting.py", line 252, in run_command
    ctx.execute()
  File "/waf/waflib/extras/xcode6.py", line 679, in execute
    self.post_group()
  File "/waf/waflib/Build.py", line 767, in post_group
    if self.current_group < self._min_grp:
AttributeError: 'xcode' object has no attribute '_min_grp'
2017-08-02 00:24:11 +02:00
Simon 73c276c11b Make xcode6 tool consider standard waf build flags
Build flags like 'cflags', 'cxxflags' passed to xcode6 builds
are now considered by the xcode6 tool. For example, running command 'waf xcode6'
with the following wscript:

cnf.env.CXXFLAGS = ['-std=c++11']
...
bld.program(..., cxxflags='-O3')

now sets the OTHER_CPLUSCPLUSFLAGS in Xcode to '-O3 -std=c++11'
2017-08-02 00:24:07 +02:00
Thomas Nagy 8289af2b98
Do not skip object-only targets 2017-08-02 00:22:33 +02:00
Simon bf14d0f340 Fixed a crash when building a subset of xcode6 targets
E.g. when running 'waf xcode6 --targets=some-target'

  File "/waf/waflib/Scripting.py", line 167, in waf_entry_point
    run_commands()
  File "/waf/waflib/Scripting.py", line 268, in run_commands
    ctx = run_command(cmd_name)
  File "/waf/waflib/Scripting.py", line 252, in run_command
    ctx.execute()
  File "/waf/waflib/extras/xcode6.py", line 679, in execute
    self.post_group()
  File "/waf/waflib/Build.py", line 767, in post_group
    if self.current_group < self._min_grp:
AttributeError: 'xcode' object has no attribute '_min_grp'
2017-08-02 00:10:42 +02:00
Simon 1d22579536 Make xcode6 tool consider standard waf build flags
Build flags like 'cflags', 'cxxflags' passed to xcode6 builds
are now considered by the xcode6 tool. For example, running command 'waf xcode6'
with the following wscript:

cnf.env.CXXFLAGS = ['-std=c++11']
...
bld.program(..., cxxflags='-O3')

now sets the OTHER_CPLUSCPLUSFLAGS in Xcode to '-O3 -std=c++11'
2017-08-02 00:10:42 +02:00
fedepell 44a9a1f026 qt5: minor correction of uic tool search error message (wrong versions printed) 2017-08-01 22:41:45 +02:00
fedepell 3e7ad303d2 qt5: minor correction of uic tool search error message (wrong versions printed) 2017-08-01 22:39:32 +02:00
Thomas Nagy 8da1662894
Example of optimizations for partial builds 2017-07-30 20:11:29 +02:00
Thomas Nagy 6cfd7239c6
Support for old gcc compilers #2003 2017-07-30 19:57:04 +02:00
Thomas Nagy 10a2b6bd04
Support for old gcc compilers #2003 2017-07-30 17:25:20 +02:00
Thomas Nagy 88bb8cc6a1
TypeError -> ValueError #2002 2017-07-30 00:14:19 +02:00
Thomas Nagy e3a8e49cf2
TypeError -> ValueError #2002 2017-07-30 00:13:42 +02:00
Thomas Nagy 549fe8cd42
Simplify BuilContext.post_group 2017-07-29 09:19:36 +02:00
Thomas Nagy 2dac65fea9
Document BuildContext.get_targets 2017-07-29 09:16:03 +02:00
Roman C. Podolski c6fb060710 Protoc: Fix bug in src-path
The tool was using an relative path for the includes, but an absolute
for the src-files. Protoc cannot distinguish between relative and
absolute paths and is not able to find sources when relative and
absolute paths are combined.

Tested with protoc 2.6.1, python 3.5.1
2017-07-23 13:25:05 +02:00
Roman C. Podolski a6f4ad6e1d Protoc: Fix bug in src-path
The tool was using an relative path for the includes, but an absolute
for the src-files. Protoc cannot distinguish between relative and
absolute paths and is not able to find sources when relative and
absolute paths are combined.

Tested with protoc 2.6.1, python 3.5.1
2017-07-23 13:24:28 +02:00
Karl Linden 213068dc99 Better default uselib_store and define_name in check_cfg.
* Let default uselib_store and define_name be upper case of the first
   word of package. This is a better default when package includes a
   version specified.
 * Remove undocumented *k argument extraction from check_cfg since it
   breaks when the first argument includes a version specifier.
2017-07-21 23:35:10 +02:00
Thomas Nagy df1767728f
WAF_PRINT_FAILURE_LOG #1930 2017-07-20 19:26:56 +02:00
Thomas Nagy 12fb29e8a5
WAF_PRINT_FAILURE_LOG #1930 2017-07-20 19:26:22 +02:00
Thomas Nagy 2fe4083f13
Do not force an encoding on config.log on python2 #1974 2017-07-19 22:39:15 +02:00
Thomas Nagy 8fedfef8a3
Do not force an encoding on config.log on python2 #1974 2017-07-19 22:38:12 +02:00
Karl Linden dd3a173e46 Simplify logic in validate_cfg
* Validate msg in only on block.
 * Reduce the number of places that set okmsg.
 * Require exactly one action to be requested.
 * Also print the detected version on successful modversion.
2017-07-17 21:26:40 +02:00
Sean Fisk 2c4ff3e28b Docs: Avoid Qt re-builds by sorting set of includes
Because Python's set type is unordered, storing include paths in it
can produce unnecessary re-builds by generating different compiler
command lines between successive builds. Avoid this by using the
sorted() function on the includes.

The documentation for Python ≥ 2.7 guarantees that sorted() is stable,
while for Python 2.5–2.6 it uses the same algorithm as list.sort(),
which is stable [1].

[1]: https://stackoverflow.com/a/1915418
2017-07-06 07:47:48 +02:00
Sean Fisk 963c3bfd0c Avoid Qt re-builds by sorting set of includes
Because Python's set type is unordered, storing include paths in it
can produce unnecessary re-builds by generating different compiler
command lines between successive builds. Avoid this by using the
sorted() function on the includes.

The documentation for Python ≥ 2.7 guarantees that sorted() is stable,
while for Python 2.5–2.6 it uses the same algorithm as list.sort(),
which is stable [1].

[1]: https://stackoverflow.com/a/1915418
2017-07-06 07:46:33 +02:00
Thomas Nagy cc9374b646
Assert against invalid inputs in Utils.run_prefork_process 2017-07-01 13:15:17 +02:00
Thomas Nagy cddc5552e4 Rename WindowsError to OSError in Python3 2017-06-23 16:51:54 +02:00
Thomas Nagy 0a1d47c7ec Initialize Parallel.processed at 0 not 1 2017-06-23 13:36:28 +02:00
Thomas Nagy c49a74dd16 Cleanup for #1984 2017-06-21 13:18:07 +02:00
fedepell 8c76bd89ef eclipse: code cleanups as by comment to #1984 2017-06-21 13:17:59 +02:00
fedepell 73dab83957 eclipse: query the compiler for standard include dirs and add them in eclipse search path, so standard includes can be found also with non standard compilers
if command doesn't succeed use hardcoded paths as before. tried with various gcc and llvm.
2017-06-21 13:17:52 +02:00
Thomas Nagy 424e5aa4ce Cleanup for #1984 2017-06-21 12:03:14 +02:00
fedepell 928faedb44 eclipse: code cleanups as by comment to #1984 2017-06-21 11:55:40 +02:00
fedepell 32164c1004 eclipse: query the compiler for standard include dirs and add them in eclipse search path, so standard includes can be found also with non standard compilers
if command doesn't succeed use hardcoded paths as before. tried with various gcc and llvm.
2017-06-21 11:55:40 +02:00
Thomas Nagy 872052e5c7 Dependencies added after the build starts no longer raise assertions #1982
It appears that quite a few builds use the swig tool technique
of setting build dependencies after the build starts. Missing
entries in Runner/revdeps can make builds non-terminating.
2017-06-20 16:31:08 +02:00
Thomas Nagy 3a838e9851 Delete playground/weak_constraint because it is obsolete 2017-06-20 11:22:58 +02:00
Thomas Nagy 4d7527b4c4 Clarify the exception type raised by cmd_and_log 2017-06-20 11:20:53 +02:00
Thomas Nagy 0c4b0592cd Update some old code in waflib/Tools/fc.py 2017-06-20 10:59:52 +02:00
Thomas Nagy 8795ebc302 Decode vswhere output as utf8/replace when cp1252 fails 2017-06-20 10:02:26 +02:00
Thomas Nagy c668663362 Decode vswhere output as utf8/replace when cp1252 fails 2017-06-19 20:24:21 +02:00
Thomas Nagy 6a638625cf Update the Swig example #1982 2017-06-19 19:42:53 +02:00
Thomas Nagy 0cebd3bd4d Clarify the buildall alias 2017-06-16 11:16:49 +02:00
Thomas Nagy 17cd653136 Clarify the buildall alias 2017-06-16 11:16:22 +02:00
Thomas Nagy a550472fcb Fix missing tg_idx_count attribute on task generators 2017-06-16 00:28:49 +02:00
Thomas Nagy f49f162817 Rework the priority system
- Have Task.weight apply to the current task only
- Do not rely on object addresses to set the build order
- Introduce tg.tg_idx_count to count task generators
- Enable propagating/non-propagating weights through Task.tree_weight/Task.weight
2017-06-16 00:14:32 +02:00
Thomas Nagy 0b5202a88b Simplify build order settings for "subst" tasks 2017-06-15 20:36:30 +02:00
Thomas Nagy af4a768775 Try to process link tasks as early as possible 2017-06-15 16:01:12 +02:00
Thomas Nagy e5e8397154 Change producer.outstanding.appendleft to producer.outstanding.append 2017-06-14 19:53:01 +02:00
Thomas Nagy 23c0d41aff Schedule tasks using a priority queue 2017-06-14 18:59:28 +02:00
Thomas Nagy ddce7d344e Simplify assertion logic in Runner.py 2017-06-14 14:16:54 +02:00
Thomas Nagy ef75def36a Split incomplete tasks into DAG and non-DAG groups 2017-06-14 13:59:46 +02:00
Thomas Nagy 1d4ce07dea Fix update->extend mismatch in Runner.py - work in progress #1982 2017-06-09 15:54:08 +02:00
Thomas Nagy f75de87cf4 Complete the rename Runner.frozen -> Runner.incomplete #1982 2017-06-08 20:04:24 +02:00
Thomas Nagy 2c9f86cc62 Ensure link tasks are processed after swig tasks 2017-06-08 19:56:04 +02:00
Thomas Nagy ccf5961607 Ensure link tasks are processed after swig tasks 2017-06-08 19:46:22 +02:00
Thomas Nagy 3e1e6586e5 Fix one regression on more_tasks #1981 2017-06-08 14:27:56 +02:00
Thomas Nagy 758d520e90 Fix the docstring of find_file #1980 2017-06-08 14:21:45 +02:00
Thomas Nagy aea1c587d3 Fix the docstring of find_file #1980 2017-06-07 19:21:27 +02:00
Thomas Nagy f72167b0e0 Fix one regression on more_tasks #1981 2017-06-07 19:07:27 +02:00
Thomas Nagy 2871e1d016
waf-2.0.0pre4 2017-06-04 09:19:14 +02:00
Seth Hinze 2fd1e44a98 Allow overriding namespace of resx files. 2017-06-04 09:18:27 +02:00
Seth Hinze 8410d4554a Add xmldoc support to cs tool. 2017-06-04 09:18:16 +02:00
Seth Hinze 1d99aed103 Allow /noconfig to be used with csc 2017-06-04 09:18:10 +02:00
Seth Hinze a3b6d7dcac Fix pdb installation in cs tool. 2017-06-04 09:18:02 +02:00
Thomas Nagy c5227d0a2b
docs 2017-06-04 08:41:43 +02:00
Thomas Nagy 377d09831b
Force an encoding on config.log #1974 2017-06-03 00:03:49 +02:00
Thomas Nagy a782130a2e
waf-1.9.12 2017-06-02 21:19:25 +02:00
Thomas Nagy 7153756042
Force an encoding on config.log #1974 2017-06-02 21:17:09 +02:00
Seth Hinze c2a1081a41 Allow overriding namespace of resx files. 2017-06-01 00:01:55 +02:00
Seth Hinze 68e7e073f0 Add xmldoc support to cs tool. 2017-06-01 00:01:27 +02:00
Seth Hinze 026de60641 Allow /noconfig to be used with csc 2017-06-01 00:00:48 +02:00
Seth Hinze 1f2ebd6db9 Fix pdb installation in cs tool. 2017-06-01 00:00:16 +02:00
Thomas Nagy 578230789a
Handle spaces in python paths on Windows #1973 2017-05-29 23:11:53 +02:00
Thomas Nagy 85efdc2246
Handle spaces in python paths on Windows #1973 2017-05-28 20:13:55 +02:00
Jan Niklas Hasse 73e7568165 Preserve modification time for is_copy=True 2017-05-24 19:14:54 +02:00
fedepell b639668c3b eclipse: generate configuration just for languages that are effecitvely used in wscript and not all of them all the time 2017-05-23 21:24:01 +02:00
fedepell 372c801472 eclipse: little code cleanup 2017-05-23 21:23:53 +02:00
Federico Pellegrin 11d5efca68 eclipse: added a playground area for testing the eclipse extra (#1968)
* eclipse: added a playground area for testing the eclipse extra

* eclipse: try to clean up a bit the playground by collapsing some wscripts
2017-05-23 21:23:47 +02:00
Gustavo Sousa bb9f4a3b82 javaw: run use_javac_files() before propagate_uselib_vars()
Updating the uselib attribute after propagate_uselib_vars() is called won't
yield the desired effect.
2017-05-23 21:23:30 +02:00
fedepell 45dafcb0fe eclipse: generate configuration just for languages that are effecitvely used in wscript and not all of them all the time 2017-05-19 21:00:35 +02:00
fedepell a952131d03 eclipse: little code cleanup 2017-05-19 21:00:35 +02:00
Federico Pellegrin b0eb986e9a eclipse: added a playground area for testing the eclipse extra (#1968)
* eclipse: added a playground area for testing the eclipse extra

* eclipse: try to clean up a bit the playground by collapsing some wscripts
2017-05-18 22:16:43 +02:00
Gustavo Sousa 003f9dd5a8 javaw: run use_javac_files() before propagate_uselib_vars()
Updating the uselib attribute after propagate_uselib_vars() is called won't
yield the desired effect.
2017-05-17 21:05:04 +02:00
fedepell 60070330a6 eclipse: add support also for java project configuration generation 2017-05-17 01:36:05 +02:00
Akira Baruah 5410e58ce5 cpplint: logger subclasses also inherit from object to safely call super() 2017-05-17 01:35:54 +02:00
Thomas Nagy 07c47309de
Handle vswhere output encodings in Python2 #1965 2017-05-17 01:35:38 +02:00
fedepell ce23d509ba eclipse: add support also for java project configuration generation 2017-05-16 18:11:52 +02:00
Akira Baruah cc52c6e230 cpplint: logger subclasses also inherit from object to safely call super() 2017-05-13 10:56:59 +02:00
Thomas Nagy 5e6e73fce6
Handle vswhere output encodings in Python2 #1965 2017-05-13 09:53:49 +02:00
Akira Baruah 86134af9fb cpplint: fix Python 2 import name collision using `absolute_import` 2017-05-13 09:42:59 +02:00
Akira Baruah f7ff1dd521 cpplint: fix Python 2 import name collision using `absolute_import` 2017-05-09 07:42:32 +02:00
Thomas Nagy 41a325496a
waf-2.0.0pre3 2017-05-08 19:13:38 +02:00
Thomas Nagy 7a51f8f364 Detect older products with vswhere.exe 2017-05-08 19:12:17 +02:00
Refael Ackermann 37e2cf449c Detect MSVS 15.0 Installation path (via vswhere)
Fixes: #1924

Inspired by the scripts from https://github.com/node4good/msvs-com-helper
2017-05-08 19:12:08 +02:00
Thomas Nagy cbf4c4f861
waf-1.9.11 2017-05-06 16:55:03 +02:00
Thomas Nagy a65c7c03b7
Detect older products with vswhere.exe 2017-05-06 11:38:25 +02:00
Refael Ackermann e19d9d990f Detect MSVS 15.0 Installation path (via vswhere)
Fixes: #1924

Inspired by the scripts from https://github.com/node4good/msvs-com-helper
2017-05-06 04:19:34 +02:00
Jan Niklas Hasse 579893f61f Import library files need to be installed into lib/ on Windows
Fix #1860.
2017-05-06 03:48:43 +02:00
fedepell 71d73d09dd eclipse: create the pydev python path configuration from the waf setup so the symbols can be correctly resolved in the IDE 2017-05-06 03:48:33 +02:00
fedepell ac4cd579e6 eclipse: use standard variable ${PROJECT_DIR_NAME} in pydev configuration instead of hardcoded name for better portability 2017-05-06 03:48:26 +02:00
Jan Niklas Hasse 7142640257 Import library files need to be installed into lib/ on Windows
Fix #1860.
2017-05-06 03:43:10 +02:00
fedepell 28cb614069 eclipse: create the pydev python path configuration from the waf setup so the symbols can be correctly resolved in the IDE 2017-05-03 21:07:25 +02:00
fedepell adc94bce75 eclipse: use standard variable ${PROJECT_DIR_NAME} in pydev configuration instead of hardcoded name for better portability 2017-05-03 21:07:25 +02:00
fedepell acb0420313 eclipse: absolute include paths must be added without the workspace prefix or they will result in an incorrect path. treat them correctly as system paths. 2017-05-03 06:44:55 +02:00
fedepell 25e01a2077 eclipse: generate tool index dynamically or visually eclipse will get confused and overwrite the name of the tools, even if the functionality seems somehow to work anyway.
documentation I found seems to point that the index should be unique.
2017-05-03 06:44:48 +02:00
fedepell f7068944f3 eclipse: pass correct languageId for C++ when generating tool otherwise settings will not be used when C++ files are edited 2017-05-03 06:44:40 +02:00
fedepell ddd49b571b eclipse: absolute include paths must be added without the workspace prefix or they will result in an incorrect path. treat them correctly as system paths. 2017-05-02 18:44:25 +02:00
fedepell 543cc204a6 eclipse: generate tool index dynamically or visually eclipse will get confused and overwrite the name of the tools, even if the functionality seems somehow to work anyway.
documentation I found seems to point that the index should be unique.
2017-05-02 18:44:25 +02:00
fedepell d618c52931 eclipse: pass correct languageId for C++ when generating tool otherwise settings will not be used when C++ files are edited 2017-05-02 18:44:25 +02:00
Akira Baruah 60635533c5 cpplint: add `--cpplint-root` option 2017-04-27 21:32:54 +02:00
Akira Baruah 2a7370c597 Check `env.CPPLINT_SKIP` after `options` are converted to `env`s #1953 2017-04-27 21:32:48 +02:00
Akira Baruah 6cf97685f3 cpplint: add `--cpplint-root` option 2017-04-27 21:32:12 +02:00
Akira Baruah 3f15e5e2c8 Check `env.CPPLINT_SKIP` after `options` are converted to `env`s #1953 2017-04-26 07:36:56 +02:00
Akira Baruah 45b11ef381 Remove undeclared `ve` variable for performance improvement #1950 2017-04-25 23:59:53 +02:00
Akira Baruah 6e5baffd47 Remove undeclared `ve` variable for performance improvement #1950 2017-04-25 23:59:04 +02:00
Thomas Nagy b37f37afcd
Improve waf -v speed in verbose mode #1950 2017-04-23 19:10:49 +02:00
Thomas Nagy f2366e8c93
Improve waf -v speed in verbose mode #1950 2017-04-23 19:10:12 +02:00
Thomas Nagy 712fdf7765
Simplify token processing in c_preproc 2017-04-22 22:30:34 +02:00
Thomas Nagy ae3d3c6b93
Override ConfigSet.__getattr__ properly in errcheck 2017-04-22 22:29:17 +02:00
Thomas Nagy 008c9016a8
Code simplifications 2017-04-22 22:12:50 +02:00
Thomas Nagy fbdc9fd5a3
Code simplifications 2017-04-22 22:12:11 +02:00
Thomas Nagy 8c32fade86
Improve Task group debugging in Runner.py 2017-04-22 22:09:23 +02:00
Thomas Nagy a768c3114d
Simplify boolean comparisons 2017-04-22 22:08:00 +02:00
Thomas Nagy 1a876716cb
Typo 2017-04-22 21:49:03 +02:00
Thomas Nagy e7ba84b8dd
Typo 2017-04-22 21:48:34 +02:00
Thomas Nagy 4b657a6b62
cleanup 2017-04-22 17:29:00 +02:00
Thomas Nagy 5c4e87bbc6
Workaround ironython systemerror bug 2017-04-22 17:17:33 +02:00
Thomas Nagy 89a37949c0
waf-2.0.0pre2 2017-04-22 15:53:00 +02:00
Thomas Nagy 3cee7b36f0
Ensure bld.current_group reflects the current group while building 2017-04-22 15:45:18 +02:00
Thomas Nagy ed24f5f82e
waf-1.9.10 2017-04-22 15:39:13 +02:00
Jiří Janoušek 585d7876f1 vala: support *.vapi as input files
Vala compiler can use *.vapi files also as input files alongside *.vala
files. If you build a library, these vapi files are not included ín
resulting *.deps files and are, therefore, suitable for internal
purposes.

Signed-off-by: Jiří Janoušek <janousek.jiri@gmail.com>
2017-04-21 22:31:17 +02:00
Jiří Janoušek c83e485d16 vala: support *.vapi as input files
Vala compiler can use *.vapi files also as input files alongside *.vala
files. If you build a library, these vapi files are not included ín
resulting *.deps files and are, therefore, suitable for internal
purposes.

Signed-off-by: Jiří Janoušek <janousek.jiri@gmail.com>
2017-04-21 22:30:47 +02:00
Thomas Nagy e8ac4ba555
Ensure bld.current_group reflects the current group while building 2017-04-20 23:28:39 +02:00
Thomas Nagy 8c3cca3284
docs 2017-04-20 22:17:46 +02:00
Thomas Nagy 3de21ec448
Exclude install vapi paths and empty installation tasks 2017-04-20 22:10:27 +02:00
Thomas Nagy 15fb3a33eb
Make the invalid uid task verification slightly less verbose 2017-04-20 22:10:08 +02:00
Thomas Nagy 5be20feee2
Exclude install vapi paths and empty installation tasks 2017-04-20 22:06:23 +02:00
Thomas Nagy 1d2f485230
Make the invalid uid task verification slightly less verbose 2017-04-20 22:03:38 +02:00
Thomas Nagy 93053013f9
Cleanup: Break multiple statements on multiple lines 2017-04-17 13:20:00 +02:00
Thomas Nagy 5ac6123e5e
Cleanup: Break multiple statements on multiple lines 2017-04-17 13:16:57 +02:00
Thomas Nagy 43c7891fe5
Cleanup 2017-04-17 12:29:17 +02:00
Thomas Nagy cfe9158664
Cleanup 2017-04-17 12:24:33 +02:00
Simon b30ff35229
Replace param 'source_files' with 'group_files'.
The 'source_files' param to the xcode6 tool was originally separated from the
conventional 'source' param because it was used to control how the source files
would appear in the XCode folder UI. Also, it'd allow to add any file extensions,
and not limited to those extensions supported by the loaded set of waf tools.

This commit renames 'source_files' param to 'group_files'. It also changes the semantic so that 'group_files' now is used like the following:

bld(
 source='...', # These are now the files compiled by XCode
 'group_files': ..., # Optionally customize the way source files appear i the UI
)

Previously, 'source_files' was used to collect source files for compilation in XCode, and to customize the UI folder structure. In this commit source_files is used only to let the user group files in different UI folders (and add additional resource files besides source files). I want to do the renaming to better reflect the param's meaning.

Additional changes:

* Remove unique_filereference

* Updated examples
2017-04-16 01:38:30 +02:00
Simon c967d29e48 Replace param 'source_files' with 'group_files'.
The 'source_files' param to the xcode6 tool was originally separated from the
conventional 'source' param because it was used to control how the source files
would appear in the XCode folder UI. Also, it'd allow to add any file extensions,
and not limited to those extensions supported by the loaded set of waf tools.

This commit renames 'source_files' param to 'group_files'. It also changes the semantic so that 'group_files' now is used like the following:

bld(
 source='...', # These are now the files compiled by XCode
 'group_files': ..., # Optionally customize the way source files appear i the UI
)

Previously, 'source_files' was used to collect source files for compilation in XCode, and to customize the UI folder structure. In this commit source_files is used only to let the user group files in different UI folders (and add additional resource files besides source files). I want to do the renaming to better reflect the param's meaning.

Additional changes:

* Remove unique_filereference

* Updated examples
2017-04-16 01:35:16 +02:00
Thomas Nagy 8bc0cfbcb3
Provide bld.cur property for compatibility
Though the property bld.cur was used internally, a few build
scripts may be relying on it. This property is to be removed
in waf-2.0
2017-04-15 15:15:32 +02:00
Thomas Nagy e30a2da973
Reflect the current build group in bld.current_group 2017-04-15 15:12:41 +02:00
Thomas Nagy 29b32f7a1a
Reflect the current build group in bld.current_group 2017-04-15 15:12:03 +02:00
Thomas Nagy 2b09852d9e
Cleanup #1943 2017-04-15 13:50:50 +02:00
Thomas Nagy 45b05b3f30
Cleanup #1943 2017-04-15 13:50:21 +02:00
Thomas Nagy f060b33e59
Obtain NO_LOCK_IN_TOP/RUN/OUT from os.environ too 2017-04-14 22:04:57 +02:00
Thomas Nagy 3ed319a744
Obtain NO_LOCK_IN_TOP/RUN/OUT from os.environ too 2017-04-14 13:04:51 +02:00
Thomas Nagy 9e9f41c613
Do not cast test outputs to integers with add_to_env 2017-04-14 02:47:44 +02:00
Thomas Nagy 98f051dfa4
Detect Python from conf.env.PYTHON 2017-04-14 02:47:30 +02:00
Thomas Nagy 2ef701bbbd
Do not cast test outputs to integers with add_to_env 2017-04-14 02:01:35 +02:00
Thomas Nagy b9df5b205e
Detect Python from conf.env.PYTHON 2017-04-14 01:54:26 +02:00
Thomas Nagy a31b08615c
Ensure env.PYTHON is set (regression) 2017-04-13 21:10:47 +02:00
Thomas Nagy 6702434df4
Ensure env.PYTHON is set (regression) 2017-04-13 21:09:43 +02:00
Thomas Nagy 6d19d4211d
Waf 1.9.10 preparation 2017-04-13 19:46:52 +02:00
Thomas Nagy 25924554f2
Extract the distcheck command argument 2017-04-13 19:03:13 +02:00
Thomas Nagy ae3f254315
Extract the distcheck command argument 2017-04-13 19:01:03 +02:00
Thomas Nagy eda87cd5b5
Ignore empty lock files 2017-04-13 12:13:34 +02:00
Thomas Nagy 17015626e2
Keep opt.load('python') optional 2017-04-13 12:13:16 +02:00
Thomas Nagy 0664e621da
Ignore empty lock files 2017-04-13 12:12:09 +02:00
Thomas Nagy 65b5a3966d
Keep opt.load('python') optional 2017-04-13 12:11:36 +02:00
Thomas Nagy 4c9ee84194
Ignore empty environment variables in find_program 2017-04-10 20:40:07 +02:00
Thomas Nagy 22ac435454
Ignore empty environment variables in find_program 2017-04-10 20:39:45 +02:00
Thomas Nagy d300a7ce0f
Make target declaration unnecessary #1943 2017-04-09 11:28:53 +02:00
Thomas Nagy 30de08ca8a
Make target declaration unnecessary #1943 2017-04-09 11:28:25 +02:00
Thomas Nagy c106c929af
Detect the most recent msvc version first 2017-04-08 21:35:37 +02:00
Thomas Nagy 26bd012695
Detect the most recent msvc version first 2017-04-08 21:35:23 +02:00
Thomas Nagy cf6372b857
Docs 2017-04-08 10:53:43 +02:00
Thomas Nagy 566b3fa644
Xcode 6 generator fixes #1939 2017-04-08 02:27:43 +02:00
WaffleSouffle 30d0673873 waf.bat changed to support Python3 installation on Windows. 2017-04-08 02:27:13 +02:00
WaffleSouffle 68bd42b235 Ignore waf.bat (generated by Windows build). 2017-04-08 02:27:04 +02:00
Thomas Nagy 059939ef60
Xcode 6 generator fixes #1939 2017-04-08 02:24:57 +02:00
WaffleSouffle 942f9a14d9 waf.bat changed to support Python3 installation on Windows. 2017-04-04 19:01:21 +02:00
WaffleSouffle b5c18460d2 Ignore waf.bat (generated by Windows build). 2017-04-04 18:35:29 +02:00
Thomas Nagy 172cafa629
Docs for #1937 2017-04-02 09:57:18 +02:00
Thomas Nagy a61bae1fca
Add -pie for parse_flags #1936 2017-04-02 09:57:02 +02:00
Thomas Nagy f6a030e172
Docs for #1937 2017-04-01 10:12:31 +02:00
Thomas Nagy bffa757bae
Add -pie for parse_flags #1936 2017-04-01 09:29:10 +02:00
Thomas Nagy 058807ed9a
Add new entries for parse_flags #1936 2017-03-31 18:16:32 +02:00
Thomas Nagy e503375cb0
Add new entries for parse_flags #1936 2017-03-31 18:15:14 +02:00
Thomas Nagy 2391bbb2dd
waf-launcher - Issue 1935 2017-03-29 22:36:46 +02:00
Thomas Nagy e77d2e1bfe
waf-launcher - Issue 1935 2017-03-29 18:18:26 +02:00
Matt Selsky b247ab1c83 Typos 2017-03-27 19:33:16 +02:00
Harald Klimach 648b10a749 Fixed Fortran module naming scheme (unexpected upper instead of lower). 2017-03-27 19:31:52 +02:00
Matt Selsky b0524d1a6f Typos 2017-03-27 19:30:51 +02:00
Harald Klimach ede9ac0740 Fixed Fortran module naming scheme (unexpected upper instead of lower). 2017-03-27 19:30:13 +02:00
yngwe@FRY 0233ec9c89 #1925: improve support for Visual Studio 2017, added support for all cross compiler & added ARM64 target support 2017-03-25 23:23:06 +01:00
yngwe@FRY 94fd866949 #1925: improve support for Visual Studio 2017, added support for all cross compiler & added ARM64 target support 2017-03-25 23:22:21 +01:00
Thomas Nagy c7f8b7093a
waf-2.0.0p1 2017-03-25 14:49:57 +01:00
Thomas Nagy 14c57b47e6
waf-1.9.9 2017-03-25 13:36:20 +01:00
Thomas Nagy 33918da4f4
Order msvc compiler detection #1907 2017-03-25 13:33:54 +01:00
Thomas Nagy 389f3f3b28
Order msvc compiler detection #1907 2017-03-25 13:33:22 +01:00
Thomas Nagy fc74d19ec0
docs 2017-03-25 13:09:19 +01:00
Thomas Nagy a26236da2a
Improve Qt detection with frameworks 2017-03-25 12:51:53 +01:00
Thomas Nagy ee4d91dfce
Improve Qt detection with frameworks 2017-03-25 12:51:26 +01:00
Jan Niklas Hasse 6ce33c7e53 Support CLICOLOR(_FORCE) to control colored output 2017-03-25 10:44:57 +01:00
Jan Niklas Hasse aa73787f63 Support CLICOLOR(_FORCE) to control colored output 2017-03-25 10:38:27 +01:00
Gordon Tisher dfba301324 Update vs2017 support to correctly configure x64 2017-03-15 18:19:13 +01:00
Gordon Tisher 2942da2efe Update vs2017 support to correctly configure x64 2017-03-15 18:18:44 +01:00
Gordon Tisher 7c44ac1b3b Add the ability to detect Visual Studio 2017 to msvc 2017-03-14 22:32:36 +01:00
Gordon Tisher d86f2ccd17 Add the ability to detect Visual Studio 2017 to msvc 2017-03-14 22:32:10 +01:00
Simon Guillot 069d5dca2e Fix bug in the clang_compilation_database tool when no C compiler is loaded 2017-03-14 22:21:10 +01:00
Simon Guillot 0a789a6f09 Fix bug in the clang_compilation_database tool when no C compiler is loaded 2017-03-14 22:20:43 +01:00
Thomas Nagy 90ab7a2ae9
Cleanup 2017-03-08 18:27:29 +01:00
Thomas Nagy c8638eab3e
Cleanup 2017-03-08 18:26:20 +01:00
Justin Israel 6a4091718e Extend ListContext to print TaskGen descriptions
Signed-off-by: Justin Israel <justinisrael@gmail.com>
2017-03-08 18:22:29 +01:00
fedepell 185530e170 cppcheck: fix Python3 incompatibilities (see #1921) 2017-03-08 18:22:22 +01:00
Justin Israel 7caabfd264 Extend ListContext to print TaskGen descriptions
Signed-off-by: Justin Israel <justinisrael@gmail.com>
2017-03-08 18:21:50 +01:00
fedepell 6ce409f98f cppcheck: fix Python3 incompatibilities (see #1921) 2017-03-08 18:17:52 +01:00
Thomas Nagy 56c9721d88
Additional fortran extensions #1916 2017-03-04 12:10:12 +01:00
Thomas Nagy f7a16da8fc
Provide unity builds per task generator 2017-03-04 12:08:55 +01:00
Thomas Nagy d625e2ac2a
Additional fortran extensions #1916 2017-03-04 12:08:22 +01:00
Thomas Nagy c8d83954b7
Provide unity builds per task generator 2017-03-04 10:29:04 +01:00
Thomas Nagy 512bbfd819
Obtain run_build_cls from run_build/check parameters 2017-03-04 08:31:59 +01:00
Thomas Nagy 37af78a02b
Obtain run_build_cls from run_build/check parameters 2017-03-04 08:22:18 +01:00
Thomas Nagy 5d4074eb7f
Display commands as string with "WAF_CMD_FORMAT=string waf build -v" 2017-03-04 08:20:27 +01:00
Thomas Nagy 5fb2e21ccf
Remove smart_continue because it is the default behaviour 2017-03-02 20:47:45 +01:00
Thomas Nagy 65dc0c7a6f
Remove force_build_directory as it is the default behaviour 2017-03-02 20:47:22 +01:00
Thomas Nagy e352fb05c0
UNC path fixes 2017-03-02 20:45:45 +01:00
Thomas Nagy 14197b713f
Cleanup 2017-03-02 20:43:44 +01:00
Thomas Nagy 121e2c29d1
Work around an annoying Python 3.6 regression #1889 2017-03-02 20:10:43 +01:00
Peter Vingelmann 0ed090037e Use platform-independent path separators in directory_files 2017-02-24 21:42:42 +01:00
Peter Vingelmann e596b529d8 Use platform-independent path separators in directory_files 2017-02-24 21:42:12 +01:00
Thomas Nagy 8560c18ccb
Process a given task group exactly one 2017-02-20 19:01:33 +01:00
Thomas Nagy 63a53064a3
Provide TaskGroups to replace mem_reducer 2017-02-19 19:58:19 +01:00
Thomas Nagy c28d7fca83
docs 2017-02-19 11:27:58 +01:00
Thomas Nagy 1c3c49d0fb
Simplify task.inputs/task.outputs usage 2017-02-19 11:05:44 +01:00
DragoonX6 0c541f606a Make clang_compilation_database add-on always output complete listings. 2017-02-18 13:04:59 +01:00
DragoonX6 70616f2b7d Make clang_compilation_database add-on always output complete listings. 2017-02-18 11:58:50 +01:00
Alexander Afanasyev acd41beef1 qt5: Workaround for QT5 detection on macOS (Bug #1910) 2017-02-15 18:36:20 +01:00
Matt Selsky c46ee9bfe3 Typo 2017-02-15 18:36:13 +01:00
Alexander Afanasyev 4e9c5cfa37 c_osx: Fix install task for mac_files 2017-02-15 18:36:05 +01:00
Alexander Afanasyev 7779706bc9 qt5: Workaround for QT5 detection on macOS (Bug #1910) 2017-02-15 18:35:28 +01:00
Matt Selsky f2186bc17b Typo 2017-02-15 08:09:40 +01:00
Alexander Afanasyev f05372f897 c_osx: Fix install task for mac_files 2017-02-15 08:05:41 +01:00
Thomas Nagy cb0fa36265
Better error message on missing macros 2017-02-14 22:47:15 +01:00
Thomas Nagy b4485d8bb1
Warn for missing cflags/cxxflags in gccdeps 2017-02-14 22:46:46 +01:00
Thomas Nagy 30d5733c22
Better error message on missing macros 2017-02-14 22:44:09 +01:00
Thomas Nagy 2f64e0a273
Warn for missing cflags/cxxflags in gccdeps 2017-02-14 22:36:35 +01:00
Thomas Nagy 1e7f260c07
Fix the thread index in parallel_debug 2017-02-14 19:42:34 +01:00
Thomas Nagy 620f255b13
Fix the thread index in parallel_debug 2017-02-14 19:42:07 +01:00
Thomas Nagy a6109383bf
waf-1.9.8 2017-02-13 20:54:50 +01:00
Thomas Nagy ffcbf5d402
Work around an annoying Python 3.6 regression #1889 2017-02-13 20:53:15 +01:00
Thomas Nagy d7822a04de
Make Task.Task.hcode a hashable value 2017-02-12 15:42:40 +01:00
Thomas Nagy 497f028a95
Implement a new priority system 2017-02-12 15:29:16 +01:00
Thomas Nagy ef3b1bdcbf
Keep winres flags in subsequent detections #1908 2017-02-11 23:34:21 +01:00
Thomas Nagy ee98328c2f
Keep winres flags in subsequent detections #1908 2017-02-11 23:33:57 +01:00
Thomas Nagy b7d93c3c4d
Update the year in headers to 2017 2017-02-11 16:13:37 +01:00
Thomas Nagy 5ac8e882e0
Remove the TaskBase class hierarchy level 2017-02-11 15:04:25 +01:00
Thomas Nagy 62fe305d04
Remove field_name, type_name, function_name from conf.check() tests #1906 2017-02-11 10:41:05 +01:00
Thomas Nagy 27cba45b5f
cleanup 2017-02-08 21:55:50 +01:00
Matt Selsky a5918ab433 Update check_endianness() example to show that the return value needs to be used 2017-02-08 21:19:19 +01:00
Matt Selsky e6b150fac9 Update check_endianness() example to show that the return value needs to be used 2017-02-08 21:16:09 +01:00
Thomas Nagy 1ea2039c3a
cleanup 2017-02-05 13:00:36 +01:00
Yinon Ehrlich cd20e6f0c2 Retain original trace-back (#1903) 2017-02-05 12:59:36 +01:00
Yinon Ehrlich 166fa49679 Retain original trace-back (#1903) 2017-02-05 12:59:01 +01:00
Thomas Nagy 2d59e84687
Cleanup 2017-01-30 23:25:30 +01:00
Jan Niklas Hasse 3a7903cebd Improve error message about version mismatch (#1902) 2017-01-30 23:25:18 +01:00
Thomas Nagy ace38d2d75
Cleanup 2017-01-30 23:24:35 +01:00
Jan Niklas Hasse 86e77ef5c3 Improve error message about version mismatch (#1902) 2017-01-30 23:23:15 +01:00
Thomas Nagy e82884e404
docs 2017-01-29 20:00:22 +01:00
Thomas Nagy f446830935
docs 2017-01-29 19:59:57 +01:00
Thomas Nagy f2eaf17089
Disable the detection of Qt debug libraries 2017-01-28 11:50:41 +01:00
Thomas Nagy ee2c5865f9
Simplify the Qt5 library detection 2017-01-28 11:41:07 +01:00
Thomas Nagy 2cf69d9a79
Simplify the Qt5 library detection 2017-01-28 11:40:41 +01:00
Thomas Nagy 107b82a242
Remove the lib- prefix from created import libraries 2017-01-28 11:14:03 +01:00
Thomas Nagy 4bdcc37d06
Now -qopenmp option #1900 2017-01-25 18:36:33 +01:00
DigitalDan05 90719cf63a Allow numbers for Java compat attribute (#1899)
Force the java "compat" parameter as a string.
2017-01-24 20:51:56 +01:00
DigitalDan05 fcb95f4532 Allow numbers for Java compat attribute (#1899)
Force the java "compat" parameter as a string.
2017-01-24 20:51:29 +01:00
fedepell ed3b943803 qt5: generate the list of Qt5 libraries by searching on the system, instead of hardcoded list in tool
This gives the possibility to search on the system (QT5_LIBDIR or library automatically
found) for libraries available instead of using the list hardcoded in the tool. The search is
done using a regexp that matches the same files as the ones used for library search with support
for dynamic/static and win32/unix.

This change makes the tool more versatile to new versions of Qt5 as we don't have to maintain the
library list anymore. It should also make configure faster as just the libraries phisically present
will be tested upon. Custom libraries installed on top of base Qt5 will be also recognized with this
method.
2017-01-24 18:26:45 +01:00
fedepell 823ad57b89 qt5: generate the list of Qt5 libraries by searching on the system, instead of hardcoded list in tool
This gives the possibility to search on the system (QT5_LIBDIR or library automatically
found) for libraries available instead of using the list hardcoded in the tool. The search is
done using a regexp that matches the same files as the ones used for library search with support
for dynamic/static and win32/unix.

This change makes the tool more versatile to new versions of Qt5 as we don't have to maintain the
library list anymore. It should also make configure faster as just the libraries phisically present
will be tested upon. Custom libraries installed on top of base Qt5 will be also recognized with this
method.
2017-01-24 18:25:28 +01:00
Thomas Nagy 1a8e5c881d
Simplify task un-installation 2017-01-22 14:40:36 +01:00
Thomas Nagy 57b406aaff
Add a task status 'canceled'
The purpose is to skip safely the tasks that have
missing dependencies due to build errors.
2017-01-21 23:47:44 +01:00
Thomas Nagy f1487eab44
iso8859-1 -> latin-1 2017-01-21 13:28:06 +01:00
Thomas Nagy 87bf7ae1fa
docs 2017-01-21 13:08:29 +01:00
Thomas Nagy 1a0396ea88
Accept nested lists as bld(source=...) 2017-01-21 12:50:52 +01:00
Matt Selsky 0d63f15cde Typo in docstring (#1895) 2017-01-16 18:42:09 +01:00
Matt Selsky d27f613fab Typo in docstring (#1895) 2017-01-16 18:41:23 +01:00
Thomas Nagy cfbf539166
Let ant_glob(generator=True) return a generator object 2017-01-15 01:33:44 +01:00
Thomas Nagy 4226d0cf7b
Code cleanup 2017-01-15 01:16:44 +01:00
Federico Pellegrin ed55a0c9ea Remove .so extension from detected qt5 library (#1892) 2017-01-11 21:30:41 +01:00
Federico Pellegrin 7133dab2dd Remove .so extension from detected qt5 library (#1892) 2017-01-11 21:29:59 +01:00
fedepell 2128ce1bc1 qt5: add --qtextralibs option to add qt5 custom libraries on the system to the default libraries list present in the qt5 tool
example usages:
waf configure --qtextralibs Qt5OpcUA
waf configure --qtextralibs Qt5OpcUA,Qt5Dummy
2017-01-11 08:07:49 +01:00
fedepell 821565818f qt5: add --qtextralibs option to add qt5 custom libraries on the system to the default libraries list present in the qt5 tool
example usages:
waf configure --qtextralibs Qt5OpcUA
waf configure --qtextralibs Qt5OpcUA,Qt5Dummy
2017-01-11 08:07:05 +01:00
Thomas Nagy 2123bc1df4
docs 2017-01-06 23:16:17 +01:00
Thomas Nagy 12b038833e
docs 2017-01-06 23:15:53 +01:00
Thomas Nagy 9d11883dbd
docs 2017-01-06 23:15:23 +01:00
Thomas Nagy fb4116f10e
docs 2017-01-06 23:14:51 +01:00
Thomas Nagy 3a12b52372
Fix the method specification in syms.py 2017-01-06 23:09:42 +01:00
Thomas Nagy a3c44f5d9b
Fix the method specification in syms.py 2017-01-06 23:08:05 +01:00
Thomas Nagy c2baf7f9bf
Missing parentheses in syms.py 2017-01-06 23:02:56 +01:00
Thomas Nagy 3938bb89aa
Missing parentheses in syms.py 2017-01-06 23:00:45 +01:00
Thomas Nagy 0d47689d97
Conceal Python 2.6 subprocess errors 2017-01-06 04:30:02 +01:00
Thomas Nagy 3cd11369d3
Update the python version detection in waf.bat 2017-01-06 04:27:33 +01:00
Thomas Nagy 113fc8192e
Update the python version detection in waf.bat 2017-01-06 04:27:08 +01:00
Federico Pellegrin 627cdb705d Add qt5 5.8.x new libraries to qt5 tool (#1888) 2017-01-05 19:33:02 +01:00
Federico Pellegrin 17e1ef04ad Add qt5 5.8.x new libraries to qt5 tool (#1888) 2017-01-05 19:32:17 +01:00
Thomas Nagy 8e19e3e714
Apidocs fixes 2017-01-05 13:16:46 +01:00
Thomas Nagy fa145ed653
Find the order that follows the alphabet 2017-01-05 03:44:36 +01:00
Thomas Nagy e5cafe6c7a
Change TaskGen.prec into a map of sets 2017-01-05 01:59:51 +01:00
Thomas Nagy f322cfe569
Improve Utils.Timer on python >= 3.3 2017-01-03 15:48:35 +01:00
Thomas Nagy 3a68ccccff
Do not add -W warnings to cflags from check_cfg 2016-12-31 17:22:41 +01:00
Thomas Nagy b6be90f555 Add -g and -W flags for #1887 2016-12-28 11:30:32 +01:00
Thomas Nagy 8fbb14356b simplification 2016-12-28 11:27:30 +01:00
Thomas Nagy 3180d81e86 simplification 2016-12-28 11:26:55 +01:00
Matt Selsky 0b971bdae5 Make sure to save compiler optimization flags from foo-config scripts (#1887)
python-config on openSUSE needs -O2 to match -D_FORTIFY_SOURCE

Fixes #1886
2016-12-28 11:23:08 +01:00
Matt Selsky dcc0a6a917 Make sure to save compiler optimization flags from foo-config scripts (#1887)
python-config on openSUSE needs -O2 to match -D_FORTIFY_SOURCE

Fixes #1886
2016-12-28 11:21:09 +01:00
montonero 94a5f51e98 Added '-o' flag for emscripten linker (#1885)
* correct static lib extension for emscripten

* added space after '-o' flag for emscripten/clang

* removed empty line

* -o flag for linker
2016-12-27 20:19:06 +01:00
montonero 86dcfb3ee2 Fixed '-o' flag for emscripten/clang (#1882)
* correct static lib extension for emscripten

* added space after '-o' flag for emscripten/clang

* removed empty line
2016-12-27 20:18:24 +01:00
montonero b97681c110 Added '-o' flag for emscripten linker (#1885)
* correct static lib extension for emscripten

* added space after '-o' flag for emscripten/clang

* removed empty line

* -o flag for linker
2016-12-27 20:15:53 +01:00
Thomas Nagy 974f59780d Prevent accidental data sharing on ext_in/ext_out/before/after 2016-12-27 14:42:54 +01:00
Thomas Nagy c12947571d Display sha256 instead of sha1 on 'waf dist' 2016-12-27 14:42:15 +01:00
Thomas Nagy 5c2db88730 Prevent accidental data sharing on ext_in/ext_out/before/after 2016-12-26 15:54:03 +01:00
Thomas Nagy b95cd931fd Improve process_rule cache accuracy 2016-12-23 18:06:57 +01:00
dffischer b521041eb4 glib2: Compile schemas per directory (#1881)
* glib2: Compile schemas per directory

By changing GSETTINGSSCHEMADIR during the build setup or on single tasks
or generators, the user may place schemas in various locations. Adding a
post build function for each of this location compiles all of them
instead of only one global directory.

* glib2: Notify user about failed schema compilation

* glib2: Demo schemas installed to multiple places

A new schema lacking lacking any enumerations was introduced. Installing
it isolated simplifies the generator creation to the essential
components demonstrated.
2016-12-23 17:45:12 +01:00
dffischer 15c45b365d glib2: Compile schemas per directory (#1881)
* glib2: Compile schemas per directory

By changing GSETTINGSSCHEMADIR during the build setup or on single tasks
or generators, the user may place schemas in various locations. Adding a
post build function for each of this location compiles all of them
instead of only one global directory.

* glib2: Notify user about failed schema compilation

* glib2: Demo schemas installed to multiple places

A new schema lacking lacking any enumerations was introduced. Installing
it isolated simplifies the generator creation to the essential
components demonstrated.
2016-12-22 18:31:07 +01:00
Thomas Nagy 1c63e4d7ee Simplify TaskGen.process_rule 2016-12-22 18:28:03 +01:00
Thomas Nagy 2468850953 Improve process_rule cache accuracy 2016-12-22 18:14:36 +01:00
Thomas Nagy 2d6487883c Fix chmod with tuple rules #1884 2016-12-22 15:21:26 +01:00
Thomas Nagy dbe1a4ad78 Include all vars in tuple rules #1883 2016-12-22 15:21:16 +01:00
Thomas Nagy 3c22fd412e Fix chmod with tuple rules #1884 2016-12-22 12:07:08 +01:00
Thomas Nagy c78d53a7a2 Include all vars in tuple rules #1883 2016-12-22 12:02:25 +01:00
montonero e3e8e6b711 Fixed '-o' flag for emscripten/clang (#1882)
* correct static lib extension for emscripten

* added space after '-o' flag for emscripten/clang

* removed empty line
2016-12-22 11:16:34 +01:00
Thomas Nagy 900d6b891c Optimize Node.path_from 2016-12-21 22:28:42 +01:00
Thomas Nagy 09713f49e4 Update the gsettings schema cache without a shell 2016-12-21 22:28:30 +01:00
XZS af7f6c68d6 glib2: consider destdir when compiling schemas
When a destdir is set, the schemas are now not only installed below it,
but also compiled there.
2016-12-21 22:28:18 +01:00
montonero 29cc88faf1 correct static lib extension for emscripten (#1876) 2016-12-21 22:27:52 +01:00
Ricardo Crudo 2ea34191fb Tools/python: add option --nopycache (#1878)
Add option to not use __pycache__ dir when installing python objects.
2016-12-21 22:27:29 +01:00
Thomas Nagy 0dd0e17ecc Optimize Node.path_from 2016-12-21 19:50:29 +01:00
Thomas Nagy ea032a73ae Update the gsettings schema cache without a shell 2016-12-20 14:01:17 +01:00
XZS f0c5c732a7 glib2: consider destdir when compiling schemas
When a destdir is set, the schemas are now not only installed below it,
but also compiled there.
2016-12-20 13:54:54 +01:00
cconverse711 ec3bf9d046 Fix boost library naming conventions 2016-12-17 14:29:07 +01:00
Ricardo Crudo b9dfbf3caf Tools/python: add option --nopycache (#1878)
Add option to not use __pycache__ dir when installing python objects.
2016-12-15 19:03:29 +01:00
montonero 0143b86505 correct static lib extension for emscripten (#1876) 2016-12-13 16:23:10 +01:00
Thomas Nagy 4095f1403a
waf-1.9.7 2016-12-13 10:26:11 +01:00
Thomas Nagy ade48ed52e
Conceal Python 2.6 subprocess errors 2016-12-08 22:43:58 +01:00
Thomas Nagy 9be4fa2c0c
Avoid hash() and __class__ usage in Task.hash_constraints 2016-12-07 23:18:53 +01:00
Thomas Nagy ce78d67f9d
Simplification __class__.inst_to -> inst_to 2016-12-07 22:01:24 +01:00
Thomas Nagy 468f205bcd
Read variables from self.vars #1873 2016-12-07 19:09:30 +01:00
Thomas Nagy de7e8b758e
Read variables from self.vars #1873 2016-12-07 19:04:46 +01:00
Thomas Nagy ad8f681072
docs 2016-12-04 01:37:18 +01:00
Thomas Nagy d0c475462b
docs 2016-12-04 01:36:00 +01:00
Thomas Nagy 90993f1153
Remove c_preproc.trimquotes 2016-12-03 06:47:37 +01:00
Thomas Nagy ceedab882d
Remove atleast-version, exact-version and max-version from conf.check_cfg 2016-12-03 06:44:20 +01:00
Matt Selsky 70899622e2 Fix grammar in ConfigSet pydoc (#1872) 2016-12-02 18:23:37 +01:00
Thomas Nagy ac2ebb2ccc
Remove Task.update_outputs, Task.always_run 2016-12-01 22:58:47 +01:00
Thomas Nagy fb01bf72ab
Remove the BuildContext.rule decorator 2016-12-01 22:57:25 +01:00
Thomas Nagy a5d2c5fe24
Remove Node.sig/Node.cache_sig 2016-12-01 22:55:49 +01:00
Thomas Nagy 0bca3987ad
docs - waf 1.9.6 2016-11-27 14:23:37 +01:00
Thomas Nagy 3e7098861c
Use find_resource for java manifest files 2016-11-26 20:27:04 +01:00
Thomas Nagy 383fb61b0d
Fix the inconsistent partial detection for #1865 2016-11-26 19:39:46 +01:00
Thomas Nagy dbcda7ec6a
Fix the inconsistent partial detection for #1865 2016-11-26 19:30:53 +01:00
Thomas Nagy c5bf55ee86
Allocate Utils.lru_cache lazily 2016-11-26 18:59:38 +01:00
Thomas Nagy 8dae660ec7
Allocate Utils.lru_cache lazily 2016-11-26 18:14:28 +01:00
Thomas Nagy f0ef5624cc
waf 1.9.6 2016-11-26 15:27:18 +01:00
Thomas Nagy 283e7953cb
More cleanup for #1865 2016-11-26 14:23:04 +01:00
Thomas Nagy 5fd84a75e6
More cleanup for #1865 2016-11-26 14:22:30 +01:00
Thomas Nagy 8efd28c2d5
Update the -source version in java examples 2016-11-26 12:03:12 +01:00
Thomas Nagy aa88cd86a5
Update the -source version in java examples 2016-11-26 12:02:41 +01:00
Thomas Nagy 1318c5f2d6
Cleanup for #1865 2016-11-26 11:54:27 +01:00
Gustavo J. A. M. Carneiro ac55bf5bf7 Accept functools.partial() as a task rule #1862 (#1865)
Accept functools.partial() as task generator rules #1862
2016-11-26 11:54:18 +01:00
Thomas Nagy 906bf781ac
Cleanup for #1865 2016-11-26 11:51:20 +01:00
Gustavo J. A. M. Carneiro 421e0e3ab9 Accept functools.partial() as a task rule #1862 (#1865)
Accept functools.partial() as task generator rules #1862
2016-11-26 11:00:01 +01:00
Thomas Nagy 57ee30760a
Increase the cache size for #1833 and #1859 2016-11-22 20:34:58 +01:00
Thomas Nagy 99d5112da6
Increase the cache size for #1833 and #1859 2016-11-22 20:34:23 +01:00
Thomas Nagy f9f6dbfa50
./waf-light --interpreter "#! /usr/bin/env python3" - for #1856 2016-11-20 21:54:45 +01:00
Thomas Nagy 15c6d75393
./waf-light --interpreter "#! /usr/bin/env python3" - for #1856 2016-11-20 21:25:22 +01:00
Thomas Nagy ec9081e81c
Let Node.find_or_declare accept paths as lists 2016-11-20 13:49:17 +01:00
Thomas Nagy 6c48f08e97
Simplify waflib/extras/force_build_directory.py 2016-11-20 13:47:31 +01:00
Thomas Nagy a892d8725a
Force files into the build directory by default 2016-11-20 13:43:06 +01:00
Thomas Nagy f10c195319
docs 2016-11-20 10:23:53 +01:00
Thomas Nagy 2c8777ebc8
Keep sorted lists in TaskGen.prec[] 2016-11-20 10:22:40 +01:00
Thomas Nagy 9c87928f33
Removed ut_fun from waf_unit_test.py 2016-11-20 10:21:19 +01:00
Thomas Nagy cdfd5f03cf
Development branch for waf 2.0 2016-11-20 10:14:25 +01:00
Thomas Nagy c142062d69
docs 2016-11-20 10:11:09 +01:00
Thomas Nagy c9b1329675
docs 2016-11-19 10:11:11 +01:00
Thomas Nagy e1f700aee8
Missing ut_cwd value in example 2016-11-19 10:02:59 +01:00
Thomas Nagy 4699a7871d
Warn of single dots in ant_glob #1853 2016-11-19 09:12:33 +01:00
Thomas Nagy af66a27da3
Specify shell usage in test script execution 2016-11-19 00:11:46 +01:00
Thomas Nagy bdb18e8394
Changed --dump-test-runner to --dump-test-scripts 2016-11-19 00:03:55 +01:00
fedepell e8942d7f22 waf_unit_test: add new option --dump-test-runner that creates python scripts to manually run or debug test executions
this can be very useful when debugging unit test problems as when run outside waf then the LD_LIBRARY_PATH (or PYTHONPATH if used with pytest extra) is set dynamically by waf and therefore running the executable manually or via gdb is not immediate
all the environment will be dumped in python script that can then be executed to run manually tests.
2016-11-18 23:40:59 +01:00
Thomas Nagy 24cc1dc057
missing import 2016-11-14 22:20:57 +01:00
Thomas Nagy af7716f014
docstring for #1851 2016-11-14 22:13:26 +01:00
Thomas Nagy 0454ee677e
docs 2016-11-08 21:31:11 +01:00
Thomas Nagy 8bea637dc7
docs 2016-11-06 18:29:16 +01:00
Thomas Nagy 9ddb8c27ef
docs 2016-11-06 12:10:39 +01:00
Thomas Nagy 058b8f7f39
simplifications 2016-11-06 12:00:35 +01:00
Federico Pellegrin 90b66a4f04 cppcheck: fix extra forn multiple build rules are in a single wscript (#1844)
* cppcheck: fix extra forn multiple build rules are in a single wscript

When executed the output from cppcheck will be put inside cppcheck.xml and
then the generated error output inside cppcheck/index.html (and related
subfiles). Of course if two separate build rules are present the files
will clash with each other and data will be lost.

So this will not work in previous version:

bld.program(source=bld.path.ant_glob('src/ex-prog-*.cpp'), includes='src/', target='ex-prog-c')
bld.program(source=bld.path.ant_glob('src/ex-prog2-*.cpp'), includes='src/', target='ex-prog2-c')

In the output just one of the two results will be there (or in worst case
we will have files being deleted/garbled) as they both try to work on
cppcheck.xml and index.html (in build and build/cppcheck respectively)

With this commit the xml/html files have a reference to the task name (so
appended with a dash) so they are unique and don't clash. Also all the
messages to the user are corrected accordingly so the user is pointed to
the correct name of the file (and so are the internal links generated in
the html file).

In the previous case we will have:

ccpcheck detected (possible) problem(s) in task 'ex-prog2-c', see report for details:
    file:///home/fede/waf/cppc/build/cppcheck/index-ex-prog2-c.html

ccpcheck detected (possible) problem(s) in task 'ex-prog-c', see report for details:
    file:///home/fede/waf/cppc/build/cppcheck/index-ex-prog-c.html

* cppcheck: Provide as an option also old way of single index.html file for compatibility
2016-11-06 11:33:25 +01:00
Thomas Nagy 6ecf6390a8
Better error message on method cycle detection 2016-11-05 11:56:08 +01:00
Thomas Nagy 076d9202ba
Append tex configuration outputs to config.log 2016-11-04 06:10:17 +01:00
Thomas Nagy 86e9c0527c
Cleanup 2016-11-03 22:42:17 +01:00
fedepell 572cd98aab cppcheck: add possibility to use -j option for multiple parallel threads, speeds up drastically when executing on multiple source files 2016-11-03 22:02:10 +01:00
fedepell 655217384a cppcheck: check very ugly if code checking for configuration mode 2016-10-27 18:36:34 +02:00
fedepell c6ebd2547c cppcheck: do not execute task when in configuration mode as this can break other tools (ie qt5) which do a test build. see also #1840 2016-10-26 22:41:02 +02:00
fedepell 54a5ebe46a pytest extra: add more graceful and informative error if parameter is pointing to no valid source files 2016-10-24 11:17:21 +02:00
Thomas Nagy 0db417ac1a
docs - #1836 2016-10-20 18:44:55 +02:00
Thomas Nagy 152f40f51a
Test for #1834 2016-10-18 18:20:27 +02:00
Thomas Nagy cd50b17e7b
Wrong cwd path for unity.py 2016-10-18 18:09:44 +02:00
Thomas Nagy 287046547b
Let unity builds use relative paths for msys #1834 2016-10-17 20:06:39 +02:00
Thomas Nagy 9ae47088bb
Enable configurable preprocessor cache sizes #1833 2016-10-14 19:28:26 +02:00
Federico Pellegrin 4d40e63fc1 Playground sample on how to chain both qt5 tool and pyqt5 extra to use both at the same time in a waf project (#1832) 2016-10-12 23:53:04 +02:00
Thomas Nagy 4bd13de095
Unnecessary file 2016-10-11 18:35:12 +02:00
Thomas Nagy 3e47e4250e
Display @argfile contents in msvcdeps #1831 2016-10-11 18:34:35 +02:00
ita1024 44dec78555 Merge pull request #1829 from mortenvp/support-directory-tools
Allow using directories as waf tools
2016-10-10 19:27:39 +02:00
Morten V. Pedersen 55786e4ac8 Update approach to include module
- Using ant_glob(..) for filtering and iterating files
- Update location in zip
- Also include files in zip
2016-10-10 13:00:53 +02:00
Morten V. Pedersen e2a03e461b Merge branch 'master' into support-directory-tools 2016-10-10 08:58:55 +02:00
Thomas Nagy 443985720f
Do not change permissions on symlinks because this is not used anywhere 2016-10-09 21:41:31 +02:00
Thomas Nagy b159ecc44f
waf-1.9.5 2016-10-09 16:28:59 +02:00
Thomas Nagy d5628f1ee6
Enable chosen groups in the install_group test 2016-10-08 23:30:35 +02:00
Thomas Nagy 4ed44b2e99
Fix the api documentation 2016-10-08 23:29:46 +02:00
Thomas Nagy f02047b8ea
Add install_user and install_group to bld.install/bld.install_as/bld.symlink_as 2016-10-08 22:35:05 +02:00
Thomas Nagy 4417a3c8c1
Minimize the amount of tasks displayed during the build #1828 2016-10-08 12:53:16 +02:00
Morten V. Pedersen 50171409c4 Allow using directories as waf tools
Sometimes it is useful to be able to add a module to waf as a tool.

Using this patch one can use ./waf-light configure build --tools /tmp/mytool

This will add the files under /tmp/mytool under /waflib/extras/mytool. Such
that they can be imported in a wscript as from waflib.extras import mytool.
2016-10-07 21:38:43 +02:00
ita1024 6f415aa17a Merge pull request #1818 from mimon/xcode6-updates
bugfix: do not merge env variables of type dictionary in xcode6 tool
2016-10-03 21:29:26 +02:00
Simon 7da04766a3 docs +xcode6 bugfix: do not merge env variables of type dictionary into PROJ_SETTINGS config 2016-10-03 20:36:10 +02:00
Thomas Nagy 70a40c1673
Let the Python byte-compilation display pyc/pyo 2016-10-03 15:30:04 +02:00
Thomas Nagy 37388fda3b
Enable waf --zones=argfile to display @argfile contents 2016-10-03 14:08:42 +02:00
Thomas Nagy 3686ac341d
Simplifications for #1823 2016-10-03 13:02:51 +02:00
Thomas Nagy eab0bd4c82
Simplifications 2016-09-30 21:36:28 +02:00
ita1024 281de5d5ef Merge pull request #1823 from jhasse/master
Don't fail on output decoding errors
2016-09-30 21:33:54 +02:00
Jan Niklas Hasse bfcef62e45 Don't fail on output decoding errors 2016-09-30 14:25:49 +02:00
ita1024 43302767dd Merge pull request #1819 from jhasse/master
Less verbose output when a task failed if not running with -v
2016-09-26 21:47:12 +02:00
Jan Niklas Hasse 87419b3c6b Less verbose output when a task failed if not running with -v 2016-09-26 12:44:23 +02:00
ita1024 3286beb4ad Merge pull request #1816 from fedepell/qt5-warncomp
If compiler_cxx was not configured before qt5 then qt5 will try to build applications with an empty compiler which gives very strange errors in the config log
2016-09-19 19:00:06 +02:00
fedepell df3b886067 If compiler_cxx was not configured before qt5 then qt5 will try to build applications with an empty compiler which gives very strange errors in the config log. Just check if the compiler is not there and remember the user that compiler_cxx should be configured before qt5. 2016-09-19 17:17:39 +02:00
Thomas Nagy a28385fe94
docs 2016-09-15 22:41:32 +02:00
Thomas Nagy 410d1568d5
Better error message for 'File %r has no mapping in %s' 2016-09-15 22:00:26 +02:00
Thomas Nagy 5e97146809
docs 2016-09-15 21:45:45 +02:00
Thomas Nagy 9ed7d41488
Expand '--foo=' with shell=False - Issue #1814 2016-09-15 21:36:02 +02:00
ita1024 f685d01217 Merge pull request #1815 from fedepell/qt5-57libs
Add qt5 5.7.x new libraries to qt5 tool
2016-09-15 21:19:41 +02:00
fedepell 40dafce024 Add qt5 5.7.x new libraries to qt5 tool 2016-09-15 14:40:24 +02:00
ita1024 ca71d1c12b Merge pull request #1813 from fedepell/pyqt5-pyqt4
Add also support for older PyQt4 bindings
2016-09-14 22:02:39 +02:00
ita1024 a621e9a0dc Merge pull request #1812 from fedepell/python-exe
Correct option used for python executable (--python and not --pythondir)
2016-09-14 22:02:05 +02:00
fedepell 4770983a87 Add also support for older PyQt4 bindings 2016-09-14 21:42:10 +02:00
fedepell e8f6d4bfe7 Correct option used for python executable (--python and not --pythondir) 2016-09-14 21:09:45 +02:00
Thomas Nagy 87e6a7c143
waf 1.9.4 - docs 2016-09-11 21:12:38 +02:00
ita1024 065ef5e98e Merge pull request #1810 from mimon/xcode7-updates
Xcode6/7 tool updates
2016-09-10 18:55:15 +02:00
Simon 88e7fe7f23 changed name bld.exe() to bld.program() in playground example 2016-09-10 15:54:55 +02:00
Simon 8b912d2b1f changed name for alias exe() to program() in xcode6 2016-09-10 15:39:07 +02:00
Thomas Nagy 9c50a30f94
waf 1.9.4 2016-09-10 12:33:21 +02:00
Thomas Nagy 8797425153
Expose Python3 timeout on Task.timeout and bld(rule=..., timeout=...) 2016-09-10 12:32:01 +02:00
Thomas Nagy 86e9b6b959
Set the configuration test build class on conf.run_build_cls 2016-09-10 12:12:46 +02:00
Thomas Nagy 62459e1147
Accept Task.cwd as str besides Node 2016-09-10 10:44:08 +02:00
Thomas Nagy 445e989594
Unnecessary __slots__ annotation on thread subclass 2016-09-04 16:21:03 +02:00
Thomas Nagy fc2946ce64
Re-raise TimeoutExpired from process executors 2016-09-03 22:36:41 +02:00
Thomas Nagy af172413f4
Python 3.3 fix 2016-09-03 22:24:29 +02:00
Thomas Nagy 71aed22539
Call killpg only if setsid is enabled 2016-09-03 20:22:43 +02:00
Thomas Nagy a91e7be005
Ignore subprocess timeouts on Python < 3.3 2016-09-03 18:36:19 +02:00
Thomas Nagy 9f14c9dda0
Kill process trees on timeouts (os.killpg) 2016-09-03 18:29:41 +02:00
Thomas Nagy afe6862525
Make unportable demos/c tests non-mandatory 2016-09-02 23:05:27 +02:00
Thomas Nagy 1721a505d9
Use the new syntax for sets 2016-09-02 20:20:43 +02:00
Thomas Nagy 7719af7af1
Missing timeout settings 2016-09-02 20:06:26 +02:00
Thomas Nagy e3092aadc7
Parallel tests can now have an execution order 2016-09-01 22:08:03 +02:00
Thomas Nagy 478d31e701
Can we start using the 'with' keyword now? 2016-08-28 14:06:39 +02:00
Thomas Nagy d8d7c87ba1
Display parallel test results as they finish 2016-08-28 13:48:16 +02:00
Thomas Nagy 8dba949014
Use the same logic as Python3.5 for handling timeouts #1807 2016-08-28 13:12:55 +02:00
Thomas Nagy 1fb3bfee6a
ValueError and OSError are subclasses of Exception 2016-08-28 10:48:41 +02:00
ita1024 873048ba8e Merge pull request #1808 from guludo/fix-saved_attrs
Fix error when adding new items to SAVED_ATTRS
2016-08-25 18:39:25 +02:00
Gustavo Jose de Sousa 86da12e56e Fix error when adding new items to SAVED_ATTRS
If something was added to SAVED_ATTRS, the next build command failed because
the saved dictionary in the pickle file didn't have that new key.
2016-08-25 13:10:33 -03:00
Thomas Nagy fdc3b47067
Python3 - Kill processes in subprocess timeouts #1807 2016-08-25 07:48:14 +02:00
Thomas Nagy f7367c8051
Enable 'waf dist' in arbitrary paths 2016-08-24 18:07:24 +02:00
Thomas Nagy 6e4ba6620c
Remove the Go example because Go has a completely distinct toolchain now 2016-08-22 19:06:12 +02:00
Thomas Nagy b022313c19
Update the changelog for Waf 1.9.3 2016-08-21 17:19:45 +02:00
Thomas Nagy a4f6c7468d
Netcache example update 2016-08-21 17:10:17 +02:00
Thomas Nagy e169da4227
waf 1.9.3 2016-08-21 15:35:44 +02:00
Thomas Nagy d31398c4a3
Docs on conf.multicheck 2016-08-21 15:31:47 +02:00
Thomas Nagy 96fe543f2e Docs 2016-08-21 15:17:47 +02:00
Thomas Nagy 5b30eba4db
Let parallel tests run all tests by default (do not stop on the first error) 2016-08-21 15:10:20 +02:00
Thomas Nagy 2c9c7aa52c
docs 2016-08-21 00:32:33 +02:00
Thomas Nagy 46ab6405dc docs 2016-08-21 00:16:46 +02:00
Thomas Nagy 07a01edba8
docs 2016-08-20 23:58:28 +02:00
Thomas Nagy ec6b72b0ad
Display failed configuration tests in yellow in multicheck 2016-08-20 13:06:23 +02:00
Thomas Nagy 93bda59033
docs 2016-08-20 12:21:16 +02:00
Thomas Nagy 145118227c
Docs 2016-08-19 22:31:32 +02:00
Thomas Nagy 7d3ddac860
Parallel configuration tests with arbitrary functions #1793 2016-08-19 22:15:04 +02:00
Thomas Nagy c868c076f7
docs 2016-08-19 20:20:13 +02:00
ita1024 82d2b89426 Merge pull request #1802 from syntion/master
Add suppport for finding lib boost_python in gentoo
2016-08-19 19:10:43 +02:00
Bernhard Vogginger 49236784b2 Add suppport for finding lib boost_python in gentoo
* find libname pattern "libboost_python-2.7.so"

Change-Id: I19a66a5992f7d077c2ed8e35e26e414ab194a7e6
2016-08-19 11:31:22 +02:00
ita1024 37f49e5f55 Merge pull request #1800 from fedepell/qt57conf
qt5: qt5 5.7 detection, added also case with std=c++11 but no fPIC/fPIE
2016-08-19 07:35:17 +02:00
fedepell a9bb62b3f6 qt5: qt5 5.7 detection, added also case with std=c++11 but no fPIC/fPIE 2016-08-19 06:59:40 +02:00
Thomas Nagy adea933f1a
Qt 5.7 -std=c++11 #1798 2016-08-18 22:21:35 +02:00
Thomas Nagy 26fc0cfced
Enhance the display of parallel configuration tests 2016-08-15 22:48:29 +02:00
Thomas Nagy 4ff5b8b7a7
docs 2016-08-15 19:44:23 +02:00
Thomas Nagy 7d60c89744
Split Nag Fortran compiler flags #1797 2016-08-15 19:41:50 +02:00
ita1024 59f186cbe0 Merge pull request #1794 from fedepell/pyqt5-conf-1
Add configuration option to select PySide2 Python QT5 bindings, while PyQt5 bindings remain otherwise searched first by default.
2016-08-14 22:39:39 +02:00
fedepell c31aee8745 Add configuration option to select PySide2 Python QT5 bindings, while PyQt5 bindings remain otherwise searched first by default. 2016-08-14 22:02:48 +02:00
Thomas Nagy 42b3bda157
Add an example of stripping executables on installation 2016-08-13 20:11:56 +02:00
Thomas Nagy 51c5df5a11
Docs 2016-08-13 19:53:41 +02:00
Thomas Nagy f5cfef4be3
Set no_errcheck_out on a task to disable the output files verification 2016-08-13 19:49:28 +02:00
Thomas Nagy 8c5624b0f1
docs 2016-08-13 19:32:02 +02:00
Thomas Nagy 6afa7b7fac
docs 2016-08-13 19:24:30 +02:00
Thomas Nagy cd9cfb4716
Add dprogram/dshlib to the example 2016-08-13 18:55:12 +02:00
Thomas Nagy e2b415f974
Strip binaries 2016-08-13 18:51:55 +02:00
Thomas Nagy 52add352d4
Update the strip example 2016-08-13 18:23:51 +02:00
Thomas Nagy 07c153c220
Un-hardcode the cfgtask class name for parallel tests 2016-08-13 09:39:25 +02:00
Thomas Nagy a4e7cb1930
Copy os.environ because Python3 cannot serialize it 2016-07-31 18:48:36 +02:00
Thomas Nagy 332f3c5665
waf 1.9.2 2016-07-31 18:39:33 +02:00
Thomas Nagy a76388b632
Obvious mistake 2016-07-31 18:16:31 +02:00
Thomas Nagy 3e08a19a56
Use the parent os.environ value as default in pre-forked processes #1791 2016-07-31 15:55:47 +02:00
Thomas Nagy 8be4adcc64
Docs 2016-07-30 22:54:46 +02:00
Thomas Nagy 7778868718
Set TaskBase.keep_last_cmd to keep the last command executed 2016-07-30 10:09:55 +02:00
Thomas Nagy 70e438393d
Add a parameter to keep the last command executed 2016-07-29 23:10:26 +02:00
Thomas Nagy 3169e0bd4b
Cleanup 2016-07-29 23:02:15 +02:00
Thomas Nagy 76eac19c02
Cleanup 2016-07-29 22:17:23 +02:00
Thomas Nagy 8a6b13344d
Move demos/xcode6 to playground/xcode6 2016-07-29 22:15:42 +02:00
Thomas Nagy 452907d102
Cleanup 2016-07-29 20:44:38 +02:00
Thomas Nagy 11ff58981a
Replace FileNotFoundError by EnvironmentError for python2 2016-07-29 20:40:38 +02:00
ita1024 1308001a9e Merge pull request #1790 from fedepell/pyqt5-separate
pyqt5 extra to support qt5 files to python conversion
2016-07-29 18:57:56 +02:00
fedepell 47ac970d15 Added pyqt5 playground example 2016-07-29 16:37:58 +02:00
fedepell f4e1b59bbc Fix install_from after suggestion of ita on how to do it better and make sure install_path is present as python requires it 2016-07-29 16:36:01 +02:00
ita1024 438595796b Merge pull request #1786 from guludo/pr/fix-autoconfig
Set do_config as True if file is not found
2016-07-29 07:36:27 +02:00
Gustavo Jose de Sousa 8c4401637a Set do_config as True if file is not found
Instead of leaving the user with an error due to FileNotFoundError exception.
2016-07-28 18:28:20 -03:00
Thomas Nagy 954594bf07
Support flexflags as arguments - #1782 2016-07-28 23:19:25 +02:00
Thomas Nagy 195a3e6562
Remove an unnecessary gccdeps verification #1784 2016-07-28 22:22:52 +02:00
Thomas Nagy ce65dfb415
Node.search -> Node.search_node #1783 2016-07-28 22:03:39 +02:00
fedepell 7ade9796a6 Fix installation path for .py files that are generated on the fly in build 2016-07-28 18:13:26 +02:00
Thomas Nagy 3c2c6a62b0
Remove leftover 'print' statements 2016-07-27 20:22:48 +02:00
Thomas Nagy 7aaa7c14ba
Make gccdeps and msvcdeps compatible - #1780 2016-07-26 19:41:57 +02:00
Thomas Nagy c26506afc5
Update the intltool docs 2016-07-25 23:33:54 +02:00
Thomas Nagy fe2f2b4fe6
Fix a docstring error 2016-07-25 23:27:05 +02:00
Thomas Nagy 1df8c148f6
Move pytest to the extras/ section 2016-07-25 23:23:44 +02:00
Thomas Nagy 346d44fee4
Remove the non-BSD licensed bits from the main branch and the future releases 2016-07-25 23:22:51 +02:00
Thomas Nagy 8e68aa4ade
Python 2 fix 2016-07-25 23:10:10 +02:00
Thomas Nagy c916febaf7
Update some old code 2016-07-25 22:12:35 +02:00
Thomas Nagy 9332a9c24d Whitespace and Options.options for cppcheck 2016-07-25 20:18:49 +02:00
ita1024 2197dbdff1 Merge pull request #1774 from xbreak/pytest
Python unit test support via `pytest' feature.
2016-07-25 19:45:57 +02:00
Thomas Nagy f623675524
Fix an obsolete import 2016-07-25 19:05:36 +02:00
Calle Rosenquist 3fb1abbb39 Python unit test support via `pytest' feature. 2016-07-25 12:47:41 +00:00
fedepell d3367e9b0a Clear up usage text 2016-07-23 14:24:57 +02:00
fedepell 5d8c8a2080 Fixes on comments 2016-07-23 14:22:26 +02:00
fedepell ad356b3ed2 - Fixed identations
- Search for tools just in PATH not in other directories as for C++
- Remove options handling as there is none at the moment
- Use find_program instead of local find_bin
- Fix author
- Try to make documentation clearer
- Remove useless after_link decorator
2016-07-23 14:13:40 +02:00
fedepell 0c78c7ad8e First version of the pyqt5 extra to add QT5 ui/resources translation to py to be used with pyqt5 or pyside2 2016-07-23 12:51:04 +02:00
Thomas Nagy 84808aa7e4 More docs 2016-07-23 10:10:46 +02:00
Thomas Nagy de96c3c537
docs 2016-07-23 10:02:58 +02:00
Thomas Nagy 86121c8ea0
docs 2016-07-23 02:07:29 +02:00
Thomas Nagy dff0d0d6b9
docs 2016-07-23 01:52:34 +02:00
ita1024 445c0214ff Merge pull request #1770 from mimon/xcode6-updates-july
Updated docs for xcode6 tool. Also, xcode6 tool tested in XCode 7
2016-07-18 20:27:14 +02:00
Simon 04b7fb6086 Updated docs for xcode6 tool. Also, xcode6 tool tested for XCode 7 (successfully) 2016-07-18 14:01:29 +02:00
Thomas Nagy ef0cf35cb1
Force qt5 static library detection for #1588
Use: 'QT5_XCOMPILE=1 QT5_FORCE_STATIC=1 waf configure'
2016-07-17 15:19:06 +02:00
Thomas Nagy b73ccba03c
More docs 2016-07-16 17:31:19 +02:00
Thomas Nagy f01c60d061
More docs 2016-07-16 17:18:20 +02:00
Thomas Nagy eab577a179
More docs 2016-07-16 17:09:00 +02:00
Thomas Nagy 0c7499109f
More docs 2016-07-16 16:54:22 +02:00
Thomas Nagy 1c66026f99 More documentation 2016-07-16 16:44:54 +02:00
Thomas Nagy fb6d9aaee3
docs 2016-07-16 15:38:22 +02:00
Thomas Nagy 6e078cff66
Python 3 fix for waf dist #1769 2016-07-14 21:21:50 +02:00
Thomas Nagy ebc0048eb0
Use if/else blocks instead of and/or in python 2.5 2016-07-14 17:45:49 +02:00
Thomas Nagy fb89abaf58
More docs 2016-07-09 02:11:17 +02:00
Thomas Nagy cdb46e29f9
Disable defines by setting define_name='' #1766 2016-07-08 19:39:34 +02:00
Thomas Nagy 1201a7776f
Typo 2016-07-07 23:32:34 +02:00
Thomas Nagy df96b50aa1
Example of finding shared library paths with ldd in configuration tests 2016-07-07 20:15:36 +02:00
Thomas Nagy 9ede16b70a
Docs - #1766 2016-07-07 07:56:20 +02:00
Thomas Nagy 1b1bad8231
Unused keyword 2016-07-07 07:47:15 +02:00
Thomas Nagy 1fa2e6f7e1
waf-1.9.1 2016-07-03 09:51:45 +02:00
Thomas Nagy 0189850710
Do not de-duplicate configuration flags passed in conf.check(stlib=) for consistency reasons 2016-07-02 19:59:17 +02:00
Thomas Nagy 0b2ae5fabd
All pictures in PDF/SVG 2016-07-02 13:10:13 +02:00
Thomas Nagy 4e3c5044e5
Docs 2016-07-02 12:38:31 +02:00
Thomas Nagy fdafe42d9f
Docs 2016-07-02 12:00:20 +02:00
ita1024 f316064be1 Merge pull request #1764 from guludo/preforked-fallback-pickle
Fallback to run_regular_process if we can't pickle arguments
2016-06-28 07:37:31 +02:00
Gustavo Jose de Sousa 9a0932951f Fallback to run_regular_process if we can't pickle arguments 2016-06-27 20:49:37 -03:00
Thomas Nagy e52d1b4916
Fix svg links in the documentation for 1.9.0 2016-06-26 13:56:19 +02:00
Thomas Nagy 39056a6ba5
waf 1.9 2016-06-26 13:45:21 +02:00
Thomas Nagy ff1be31ec4
Fix Qt5 detection when pkg-config is missing 2016-06-26 12:06:17 +02:00
Thomas Nagy 50ae7dc3ba
Api docs 2016-06-26 11:59:27 +02:00
Thomas Nagy 461c065bbb
Typo 2016-06-26 00:16:51 +02:00
Thomas Nagy f84b219818
Api docs 2016-06-26 00:15:41 +02:00
Thomas Nagy 850e9ad5fc
Simplify env['FOO'] -> env.FOO 2016-06-25 23:54:12 +02:00
Thomas Nagy ef48d49260
Remove update_outputs from the documentation 2016-06-25 22:48:47 +02:00
Thomas Nagy 4991120891
Api docs 2016-06-25 21:30:32 +02:00
Thomas Nagy fc02c1d42a
Api docs 2016-06-25 20:10:04 +02:00
Thomas Nagy 02fb7ceff7
Show all connections in the feature maps 2016-06-25 19:55:51 +02:00
Thomas Nagy f08356516a
Fix invalid method names in after/before constraints 2016-06-25 19:54:26 +02:00
Thomas Nagy c9db34e1bf
Fix invalid method names in after/before constraints 2016-06-25 19:53:54 +02:00
Thomas Nagy 8e721fb49a
Ignore temporary rst files in the apidoc folder 2016-06-25 19:18:28 +02:00
Thomas Nagy d609e6c349
Documentation bug: the feature map was not updated in a long time 2016-06-25 19:16:01 +02:00
Thomas Nagy 8ad77d3b6b
Use SVG in the feature map 2016-06-25 18:22:13 +02:00
Thomas Nagy eaa83004c8
Api docs 2016-06-25 16:23:06 +02:00
Thomas Nagy ef6525c0bf
Api docs 2016-06-25 14:49:27 +02:00
Thomas Nagy a2ca4b6dab
Remove Options.platform and Options.cmds 2016-06-25 13:55:13 +02:00
Thomas Nagy 3c132ad97a
Fix a wrong error message when installing to readonly folders 2016-06-25 13:38:48 +02:00
Thomas Nagy 57e711d801
Api docs 2016-06-25 13:27:22 +02:00
Thomas Nagy 96f4ebc52f
Api docs 2016-06-25 13:12:59 +02:00
Thomas Nagy 2c76187d41
Api docs 2016-06-25 12:50:04 +02:00
Thomas Nagy ccc77cd9f5
Api docs 2016-06-25 02:38:26 +02:00
Thomas Nagy 21e9be8cdb
Api docs 2016-06-24 13:31:06 +02:00
Thomas Nagy 63a29dfd18
Api docs 2016-06-24 13:26:36 +02:00
Thomas Nagy 79aece2650
Api docs 2016-06-24 13:21:32 +02:00
ita1024 e487466c76 Merge pull request #1762 from fedepell/qt5_ui_path
qt5: uic generation task missing path to target, name conflict possible
2016-06-22 18:28:54 +02:00
fedepell 585bc1e9a8 qt5: uic generation task, use node.parent insted of self.path otherwise the path gets lost and all ui_XXX.h get generated on top level build directory which may also
lead to name clashes
2016-06-22 14:07:10 +02:00
Thomas Nagy 6854fae055
Removed some annoying whitespace 2016-06-21 22:57:06 +02:00
ita1024 df4a17b97a Merge pull request #1760 from danbar/check_swig_version
Extend check_swig_version
2016-06-21 22:49:35 +02:00
Daniel Bartel f88f13f0cf Fix the Swig version detection message 2016-06-21 21:19:46 +02:00
Daniel Bartel 44b571172b Merge branch 'master' into check_swig_version 2016-06-21 21:07:55 +02:00
Thomas Nagy 9be51b5cf8
Fix the Python version detection message #1760 2016-06-21 20:22:27 +02:00
ita1024 7acb027961 Merge pull request #1761 from fedepell/unit_test_ldlibrarypath
Manage case in unit_test running when LD_LIBRARY_PATH is not already defined in the environment
2016-06-21 19:51:06 +02:00
fedepell 567ab43ac2 Manage case in unit_test running when LD_LIBRARY_PATH is not already defined in the environment 2016-06-21 09:13:57 +02:00
ita1024 9f610bd23f Merge pull request #1758 from guludo/autoconfig
Fix autoconfig
2016-06-21 07:35:18 +02:00
Gustavo Jose de Sousa a339a9c320 Yet another fix for #1758
The build command wasn't being executed for 'clobber' autoconfiguration.
2016-06-20 18:53:35 -03:00
Daniel Bartel 2241db8557 make check_swig_version similar to check_python_version 2016-06-20 21:38:46 +02:00
Daniel Bartel bf05bac08a fix output format issue 2016-06-20 21:33:26 +02:00
Thomas Nagy 2f03b76833
Qt5 may require -fPIC 2016-06-20 20:24:37 +02:00
Thomas Nagy b2bfbba4f0
One more fix needed for #1758 2016-06-19 13:39:03 +02:00
Thomas Nagy ed7e2f5016
Add -pthread to link jni programs on FreeBSD 2016-06-19 11:26:25 +02:00
Thomas Nagy 59be2b56c0
This fixes #1758 2016-06-19 09:01:02 +02:00
Thomas Nagy ee8515e5ee
docs 2016-06-18 01:28:09 +02:00
Thomas Nagy 8120504156
Restore configuration values with Configure.autoconfig='clobber' #1758 2016-06-18 01:06:23 +02:00
Thomas Nagy dcd01d6369
Deprecate ut_fun as we have ut_str now 2016-06-17 22:04:16 +02:00
Thomas Nagy 764645a014
Reduce the amount of paths added to unit test environment variable PATH 2016-06-17 22:02:41 +02:00
Thomas Nagy 16aeb5756a
Extended unit test program parameters 2016-06-17 20:18:06 +02:00
Thomas Nagy 7d5f6e4a59
Process tsk.env.PATH as lists or strings 2016-06-17 07:34:11 +02:00
Thomas Nagy 98f495bda1
Simplify manifest file processing 2016-06-16 21:39:50 +02:00
Thomas Nagy f18d481e75
No need to wrap fc/c/cxx classes for manifest processing 2016-06-16 21:07:40 +02:00
Thomas Nagy 73384b11f4
Dead code removal 2016-06-16 21:02:24 +02:00
Thomas Nagy d50017f693
Have Task.exec_command add tsk.env.PATH to os.environ in the child process 2016-06-16 20:07:40 +02:00
Thomas Nagy dee0932fb0
No need to paste /Fo flags as the command system does not insert spaces anymore 2016-06-16 19:42:29 +02:00
Thomas Nagy 27b2c3b8c4
Task.exec_command already sets the cwd, no need to repeat it 2016-06-16 17:08:53 +02:00
Thomas Nagy 092712f001
Enable per-OS @argfile limits 2016-06-15 22:24:30 +02:00
Thomas Nagy 537d1fcd45
Simplify long command processing 2016-06-15 20:24:34 +02:00
Thomas Nagy 4a09e1943a
Workaround for #1756 2016-06-13 19:19:00 +02:00
fedepell d202190cd0 Fix: when using the ut_cmd or Option --testcmd, if the test command line has parameters (added for example with the ut_fun method as in the examples)
this will be lost as just ut_exec[0] was used. Now join the command line before using it in substition.
2016-06-12 23:59:07 +02:00
Thomas Nagy 7115404006
New public key 2016-06-12 22:40:50 +02:00
Thomas Nagy 605952fe92
Remove redundant warnings 2016-06-11 22:26:34 +02:00
Thomas Nagy 04df9202fb
Reduce Swig verbosity for #1755 2016-06-11 22:23:06 +02:00
fedepell 1986391d79 Fixes #1748 : doxygen convert EXCLUDE_PATTERNS occourences of */ in **/ as internally globs are used 2016-06-05 22:11:18 +02:00
fedepell 32bd21a77f qt5: Fix usage examples as libraries in qt5 are named QT5XXX and not QTXXX as in qt4 (ie. QT5WIDGETS instead of QTWIDGETS) 2016-06-05 22:10:38 +02:00
Thomas Nagy f71fe257ff
Make c_preproc.filter_comments a method so that it is easier to override 2016-06-05 00:53:25 +02:00
Thomas Nagy 88f8da4af1
msvc test 2016-06-05 00:39:04 +02:00
Thomas Nagy e8ef5a89eb
More cleanup 2016-06-05 00:23:57 +02:00
Thomas Nagy 75b1423ce8
Winrc processing is almost certainly broken... 2016-06-05 00:01:01 +02:00
Thomas Nagy 062a5263a0
Update conf.check_waf_version to 1.9 2016-06-04 09:33:13 +02:00
fedepell e64061f6d2 DOXY_FILE_PATTERNS is generated as a string but then used as an array when using the RECURSIVE option, therefore the generated patterns for files to be searched are wrong. Convert it into an array with split() therefore to have correct patterns. 2016-06-04 08:51:09 +02:00
Thomas Nagy 18044bddfe
One more Python version for the test suites 2016-05-31 22:41:12 +02:00
Thomas Nagy a4c64c1731
Docs 2016-05-30 22:31:44 +02:00
Daniel Bartel fb68af3544 fix comment regarding commandline options 2016-05-30 21:26:14 +02:00
Thomas Nagy ae243dd23b
Fix waflib/extras/syms.py 2016-05-29 16:58:41 +02:00
Thomas Nagy 5526a71695
Update batched_cc for waf 1.9 2016-05-29 16:45:42 +02:00
Thomas Nagy 6665a6ebdd
Update waflib/extras/stale.py 2016-05-29 14:11:05 +02:00
Thomas Nagy 02a8361149
Beautify Logs.{debug,error,info,warn} now that the formatting bug is fixed 2016-05-28 16:18:51 +02:00
Thomas Nagy 8407845787
Provide a showcase for print_commands.py and remove some old code 2016-05-28 16:05:00 +02:00
Thomas Nagy a615bb56c1
Use the info/error parameters 2016-05-28 15:11:58 +02:00
Thomas Nagy 8fcd30dcc8
Subclasses should not provide incompatible constructors 2016-05-28 14:51:44 +02:00
Thomas Nagy 34bad1498f
Remove the preforks since we already have a version with subprocesses in Utils.py 2016-05-27 18:59:40 +02:00
Thomas Nagy a2b7c639e8
cleanup 2016-05-27 18:23:04 +02:00
Juan Alday a5a0a81abb Fixes missing backslash for REG_PYTHON_DIR 2016-05-25 07:43:25 +02:00
Thomas Nagy 6574fd7e40
waf 1.9.0 p3 2016-05-23 22:08:57 +02:00
Thomas Nagy d3471d6171
Adjustments for the msvc configuration structure changes 2016-05-22 18:39:44 +02:00
Thomas Nagy c3af6e3fad
Simplify the data structures in msvc.py 2016-05-22 18:27:57 +02:00
Thomas Nagy 1eb45162b1
Bind setup_msvc and setup_ifort as configuration methods 2016-05-22 17:11:29 +02:00
Thomas Nagy 9c44a4b360
Remove print_all_msvc_detected 2016-05-22 17:10:21 +02:00
Thomas Nagy 315d94ec24
Typo conf->self 2016-05-22 17:06:53 +02:00
Thomas Nagy 0c945f9e0a
Simplifications 2016-05-22 16:57:22 +02:00
Thomas Nagy 25fc153658
Improve ifort logging 2016-05-22 16:48:14 +02:00
Thomas Nagy 201118736e
Error handling simplifications 2016-05-22 12:40:51 +02:00
Thomas Nagy 76c9d3356b
Remove msvc.get_compiler_env which does not get anything 2016-05-22 12:12:32 +02:00
Thomas Nagy c46ffd1a4a
Typo 2016-05-22 12:09:46 +02:00
Thomas Nagy e3d1da421f
Remove one level of object nesting in msvc configuration 2016-05-22 12:04:23 +02:00
Thomas Nagy dbad47244b
Cleanup 2016-05-22 11:15:00 +02:00
Thomas Nagy bae3e35af5
Cleanup 2016-05-22 10:58:24 +02:00
Thomas Nagy 56b84dc5a5
Cleanup 2016-05-22 03:13:28 +02:00
Thomas Nagy 15985db73d
Refactor ifort.py like msvc.py 2016-05-22 03:07:44 +02:00
Thomas Nagy 7fadda584a
Add a __repr__ method for MSVC_INSTALLED_VERSIONS 2016-05-22 02:50:02 +02:00
Thomas Nagy df6e88f2f5
Typo 2016-05-22 02:45:12 +02:00
Thomas Nagy 929f89c0bb
Simplify msvc.py 2016-05-22 02:43:35 +02:00
Thomas Nagy 67e7db41d9
Simplification x=x+1 -> x+=1 2016-05-22 00:45:47 +02:00
Thomas Nagy d3a3b23b13
Add a build function to the 'install' tests for consistency 2016-05-21 12:13:19 +02:00
Thomas Nagy 75a011f81c
docs 2016-05-21 12:08:28 +02:00
Thomas Nagy ab9609c0d8
docs 2016-05-21 12:01:48 +02:00
Thomas Nagy c2646d2380
Provide md5_tstamp by default and make it easier to add more persistent BuildContext dicts 2016-05-21 11:58:47 +02:00
Thomas Nagy f876392200
Must call os.remove on files 2016-05-21 01:15:19 +02:00
Thomas Nagy a079b50df1
Add more installation tests 2016-05-21 00:40:49 +02:00
Thomas Nagy 09fd2f211f
Ensure Node.delete can remove invalid folders 2016-05-21 00:39:56 +02:00
Thomas Nagy e09a32467f
Fix install_files in the case relative_trick=True 2016-05-20 19:20:54 +02:00
Thomas Nagy 5eaf7aee1b
Simplification 2016-05-18 22:02:47 +02:00
Thomas Nagy 74e54322c5
Use try-else-finally in Python >= 2.5 2016-05-18 22:01:37 +02:00
Thomas Nagy 3f38b9d2b8
Logic simplification 2016-05-18 21:34:23 +02:00
Thomas Nagy 3c5be88550
Better names for install task method and compatibility fix for install_task.dest 2016-05-18 19:43:14 +02:00
Thomas Nagy fd05cff103
Missing installation fixes 2016-05-17 19:49:44 +02:00
Thomas Nagy 5cb7b89ac1
typo 2016-05-16 20:11:00 +02:00
Thomas Nagy 26b370f440
Remove a few more 'Exception:' lines 2016-05-14 12:15:15 +02:00
Thomas Nagy 158bc72e8e
Remove the old shutil.copy override on Windows 2016-05-14 11:29:06 +02:00
Thomas Nagy 12c7609802
Removed some dead code 2016-05-14 00:16:29 +02:00
Thomas Nagy 9a5b0e41ac
Fix waf step 2016-05-13 23:24:02 +02:00
Thomas Nagy 62f8b482ab
Code simplifications 2016-05-13 23:20:07 +02:00
Thomas Nagy da5c7d8b5c
Moved unnecessary constants out of Context.py 2016-05-11 21:59:16 +02:00
Thomas Nagy 441ed98a3d
Better error messages in Qt5 2016-05-09 22:33:01 +02:00
Thomas Nagy a8ef298191
More tests 2016-05-07 00:09:20 +02:00
Thomas Nagy 12cbb42cd7
docs 2016-05-06 23:22:55 +02:00
Thomas Nagy 145dba3fd1
Unused variable 2016-05-06 20:59:40 +02:00
Thomas Nagy 3fb226c994
Use the build command in configuration tests (hard-coded BuildContext class) 2016-05-06 20:57:53 +02:00
Thomas Nagy 226c2b1d94
Set install_to from the add_install_task 2016-05-06 20:56:36 +02:00
Thomas Nagy b1f5c0f814
Create installation tasks directly
Task generators created from other task generators may be
skipped during partial builds. This change re-enables
install_task as a task attribute and provides a task
object with input and output nodes which can be re-used
by other tasks.
2016-05-06 15:54:36 +02:00
Thomas Nagy 5511593318
Move boring Build.inst construction details to the class 2016-05-06 11:12:54 +02:00
Thomas Nagy 9991004343
Extract Build.inst.run_now 2016-05-06 09:57:01 +02:00
Thomas Nagy 20b62a4eea
docs 2016-05-06 09:11:31 +02:00
Thomas Nagy 6c21deb583
install_task -> install_tg 2016-05-03 23:14:10 +02:00
Thomas Nagy 16082a4c3e
docs 2016-05-03 21:27:15 +02:00
Thomas Nagy da389364c5
docs 2016-05-02 23:31:31 +02:00
Thomas Nagy 4c05587684
Docs 2016-05-01 21:21:04 +02:00
Thomas Nagy b70692dbb3
Add a configuration test to add /usr/local/lib in linkflags on FreeBSD 2016-05-01 17:03:55 +02:00
Thomas Nagy 568cd6881d
Set the Qt5 search path on FreeBSD 2016-05-01 16:21:23 +02:00
Thomas Nagy e7aa8349be
Changed the moc_foo.cpp file name to moc_foo.n.cpp to protect against name clashes 2016-05-01 14:49:55 +02:00
Thomas Nagy ae8253f571
Process Qt files according to the Qt documentation 2016-05-01 14:21:46 +02:00
Thomas Nagy 6b2e837bc2
Issue 1726 2016-05-01 13:21:06 +02:00
Thomas Nagy 5a35d6c105
Add a Qt5 example 2016-05-01 12:02:58 +02:00
Thomas Nagy eb62ce7620
Set post_mode=POST_LAZY by default to process the next build groups once build files are present 2016-04-30 15:10:16 +02:00
Thomas Nagy a7dac255af
Fix an error in the progress bar 2016-04-30 14:24:46 +02:00
Thomas Nagy 80109eacbe
Improve error handling in the case of missing implicit dependencies
Avoid calling are_implicit_nodes_ready() twice.
Stop the build when files are missing or truncated.
Provide a better error message and avoid catching all exceptions.
2016-04-30 13:35:08 +02:00
Thomas Nagy fdc67d58f6
Fix an undefined variable in parallel_debug 2016-04-28 20:25:04 +02:00
Thomas Nagy bf45d33f9e
Update parallel_debug 2016-04-28 20:14:02 +02:00
Thomas Nagy b59a04a086
Moved the garbage collection code to the object owner 2016-04-28 20:12:20 +02:00
Thomas Nagy 7e047a1284
stripping problems 2016-04-28 19:27:44 +02:00
Thomas Nagy d767afa32c
docs 2016-04-28 00:37:29 +02:00
Thomas Nagy 3e86ea6cb8
Fixed an accidental dependency on inst.dest 2016-04-28 00:33:34 +02:00
Thomas Nagy dd81cb74dc
Pass the vala environment for installation (not modified so it should be fine) 2016-04-28 00:29:12 +02:00
Thomas Nagy 1eaa87413d
Refactor bld.install_as/bld.install_files/bld.symlink_as to use actual task objects 2016-04-28 00:23:54 +02:00
Thomas Nagy 09f67a3b3a
Remove the private Scripting._can_distclean function 2016-04-27 18:42:38 +02:00
Thomas Nagy bc3915c90a
Close process.py for running processes - Issue 1735 2016-04-27 18:35:02 +02:00
Thomas Nagy e77b8dc24b
Catch errors in format_defines 2016-04-26 19:38:19 +02:00
Thomas Nagy 8b32d93ec3
cleanup: '%s' -> %r 2016-04-26 19:35:46 +02:00
Thomas Nagy ba1932ebc2
Do not define the empty prec object on task_gen instances by default 2016-04-26 19:22:56 +02:00
Thomas Nagy 508b20679d
Do not truncate _task suffixes from Task class names 2016-04-26 18:33:03 +02:00
Thomas Nagy 0ba6b042d5
Remove mac_resources processing, use mac_files instead 2016-04-25 22:35:58 +02:00
Thomas Nagy 304935bb9f
Remove popitem() which was added for the lru cache 2016-04-23 23:02:16 +02:00
Thomas Nagy 9133dbc5c9
Cleanup: no need for keys() everywhere 2016-04-22 21:10:22 +02:00
Thomas Nagy 59b6c757e9
Docs 2016-04-22 19:54:42 +02:00
Thomas Nagy 3899c150e3
Provide a more performant LRU cache implementation 2016-04-22 19:43:18 +02:00
Thomas Nagy d2cd1ebd0b
Provide our own version of ordered_iter_dict
Python OrderedDict does not provide a C implementation, so it
is just best to use our own implementation by default.
We also want the iteration order from the end for the purposes
of matching files by extension.
2016-04-22 19:36:35 +02:00
Thomas Nagy 44db1efc02
Enable regexp objects in @extension besides strings for file extensions 2016-04-22 19:27:22 +02:00
Thomas Nagy b0954282e9
Remove the -DDLL_EXPORT flag which was added by default to fortran link on windows platforms 2016-04-21 22:37:27 +02:00
Thomas Nagy b87a761ead
Tuples in startswith/endswith (Python 2.5 feature) 2016-04-21 22:30:35 +02:00
Thomas Nagy d2ba87b296
Duplicate code 2016-04-21 22:12:39 +02:00
Thomas Nagy 8520dd65bb
Code cleanup 2016-04-19 22:00:21 +02:00
Thomas Nagy 8114914e62
Colorgcc for other compilers? Issue 1732 2016-04-19 21:47:59 +02:00
Thomas Nagy fd2981f91f
Remove Task.dep_vars as it is unnecessary 2016-04-16 13:05:27 +02:00
ita1024 2be642017f Merge pull request #1730 from shoover/msvc-lazy
Enable lazy Visual Studio detection by default: one missed spot.
2016-04-15 22:50:57 +02:00
Shawn Hoover ac3a332b03 Enable lazy Visual Studio detection by default: one missed spot. 2016-04-15 13:41:53 -04:00
Thomas Nagy 6aaae99afe
cleanup 2016-04-15 18:17:26 +02:00
Thomas Nagy fa8d8e2b45
Typo in platform_toolset_ver 2016-04-12 22:06:08 +02:00
James Harris 10a6e27872 Add PlatformToolset ver. to msvs proj template
This patch adds support for an easier syntax for customizing which
version of Visual Studio msvs.py targets. It also allows users to
specify the PlatformToolset property on projects generated by waf. This
is necessary in order to properly generate projects for newer versions
of Visual Studio such as 2013 and 2015.

Example Syntax:

To generate a solution targeted at visual studio 2013 use the following
example:

```Python
class msvs_2013(msvs.msvs_generator):
    cmd = 'msvs2013'
    numver = '13.00'
    vsver = '2013'
    platform_toolset_ver = 'v120'
```

This will populate the associated fields correctly for msvs 2013.
2016-04-12 19:06:41 +02:00
Thomas Nagy bd76420613
Waf 1.9 preview 1 2016-04-11 23:54:15 +02:00
Thomas Nagy e35d3628d2
Add EnvContext to simplify configuration-dependent command definition 2016-04-11 23:28:33 +02:00
Thomas Nagy e0080e9f58
Identify java tasks more accurately and add build order on non-jar tasks - Issue 1725 2016-04-11 00:08:20 +02:00
Thomas Nagy aeed691829
Fun with conditional expressions 2016-04-08 18:37:09 +02:00
Thomas Nagy 102a345eb0
One more configuration test 2016-04-06 21:58:09 +02:00
christophe.duvernois 49ed1e0c0a java tool : allow manifest to be a node 2016-04-05 19:23:32 +02:00
Thomas Nagy 2c06f0acd6
Simplification 2016-04-05 19:22:54 +02:00
Thomas Nagy d7a295ab0f
Simplification m.group(0) -> m.group() 2016-04-04 22:18:28 +02:00
Thomas Nagy e8cf059004
Do not strip / from conf.check(x=, uselib_store=Y) stored arguments 2016-04-04 19:00:31 +02:00
Thomas Nagy 06cb261cd2
More config tests 2016-04-03 13:41:24 +02:00
Thomas Nagy 61d1bd74ee
More config tests 2016-04-03 13:30:03 +02:00
Thomas Nagy a1a24c8456
Use define_name in check_cfg(define_name=, global_define=1) 2016-04-03 13:20:42 +02:00
Thomas Nagy e790f6d40f
Added a deprecation warning for the case conf.check_cfg(atleast_version=) 2016-04-03 12:40:00 +02:00
Thomas Nagy 89d5b5462f
Enable define_name in conf.check(modversion=,define_name=) 2016-04-03 12:09:22 +02:00
Thomas Nagy c0c0da2e92
Set DEFINES=[X=1] with conf.check_cfg(define_name=X) to override the defaults 2016-04-03 11:42:59 +02:00
Thomas Nagy 00c955d8fa
Option for adding HAVE_X to conf.env - conf.check(add_have_to_env=1) 2016-04-03 11:08:00 +02:00
Thomas Nagy cf9330a371
Remove Context.__hash__ 2016-04-01 23:27:46 +02:00
Thomas Nagy ee0778a76f
Extra parenthesis around assert message 2016-04-01 23:14:26 +02:00
Thomas Nagy 41dcf329b0
Include any symlink in dist archives - Issue 1719 2016-03-31 22:10:47 +02:00
Thomas Nagy 8717fa791f
outstanding.insert -> outstanding.append_left 2016-03-31 07:42:08 +02:00
ita1024 a0bd260957 Merge pull request #1721 from mclayton7/waf-1.9
Fix qt4.py to use deque instead of list
2016-03-31 07:36:28 +02:00
Mac Clayton 19dc72e16d Fix qt4.py to use deque instead of list 2016-03-30 19:04:57 -05:00
Thomas Nagy bd255ce641
Missing TaskBase.uid() method 2016-03-30 23:01:46 +02:00
Thomas Nagy c2361d54bd
Removed TaskBase.attr as it is never used 2016-03-30 21:17:26 +02:00
Thomas Nagy c81e7548f1
A few more tests 2016-03-28 22:40:15 +02:00
Thomas Nagy c563396afe
Do not add defines to config.h when global_define is 0 2016-03-28 17:49:27 +02:00
Thomas Nagy 6089893e40
Simplify the assignment of configuration test execution to defines 2016-03-28 16:19:36 +02:00
Thomas Nagy 9fd2683095
Let conf.check/conf.check_cfg set HAVE_x in config.h by default 2016-03-28 16:16:30 +02:00
Thomas Nagy 1eaa5e7a0f
parse_flags code cleanup 2016-03-28 14:46:29 +02:00
Thomas Nagy b585594d4d
For consistency, cast HAVE_X to integer values 2016-03-28 09:59:24 +02:00
Thomas Nagy c917e1af63
Remove empty entries in windows path splitting 2016-03-27 21:41:21 +02:00
Thomas Nagy 1ebb318ec0
find_node returns Nodes that exist, no need to verify again 2016-03-27 21:29:02 +02:00
Thomas Nagy 6579592065
re_cpp matches are never empty 2016-03-27 19:25:12 +02:00
Thomas Nagy 51b68cf13b
New --profile command-line option 2016-03-25 14:20:57 +01:00
Thomas Nagy 31742bd06d
Remove old fixes for Python < 2.3 2016-03-25 14:02:36 +01:00
Thomas Nagy 026bae9601
Reduce the amount of function calls in include extraction 2016-03-25 13:30:32 +01:00
Thomas Nagy df7fc838ce
Do not capture unused regexp groups 2016-03-25 12:56:25 +01:00
Thomas Nagy 5d8d7bf700
Save a few function calls in waflib/Tools/c_preproc.py 2016-03-25 12:22:00 +01:00
Thomas Nagy ca01ddb83a
Removed an unused variable in Task.py 2016-03-25 12:03:45 +01:00
Thomas Nagy 3cbd029cc9
Task.sig_vars, Task.sig_explit_deps and Task.sig_implicit_deps return None 2016-03-25 11:50:32 +01:00
Thomas Nagy a64a8d1d29
Extend relative cwd processing to Task generators 2016-03-23 22:28:14 +01:00
Gustavo Jose de Sousa d46f541099 Use stash/revert/commit pattern for transactional configuration
Apply that pattern when relevant. That allows correct behavior if tools are
loaded inside a transaction.
2016-03-22 08:05:53 +01:00
Thomas Nagy 85e403516c Issue 1632 2016-03-19 18:14:08 +01:00
Gustavo Jose de Sousa b5584470f9 Add commit() method to ConfigSet
That allows users to use nested transactions.
2016-03-19 15:22:09 +01:00
Thomas Nagy e8bf2731d1
Increase the default cache size for c_preproc 2016-03-19 15:18:16 +01:00
Thomas Nagy dc1a0d00a2
Docs 2016-03-19 14:47:10 +01:00
Thomas Nagy a08aff6bff
Format debug/info records lazily 2016-03-19 14:46:22 +01:00
Thomas Nagy d62767e561
Add Node.isdir and remove cache_isdir optimizations for the time being 2016-03-19 14:21:02 +01:00
Thomas Nagy 555507975d
Rewrite ConfigSet._get_list_value_for_modification 2016-03-19 10:26:42 +01:00
Thomas Nagy d54622e341
Simplification: remove Configure.err_handler 2016-03-18 19:54:31 +01:00
Thomas Nagy 7960f19cb1
Fix for extra lines in windows logs - Issue 1715 2016-03-18 19:32:10 +01:00
Thomas Nagy 1fb3645493
Simplifications 2016-03-18 18:26:25 +01:00
Thomas Nagy 017d8fd39e
Use relative paths in apply_incpaths by default
Relative paths are usually best for for specialized compilers (emscripten),
so this is for convenience. Absolute paths are usually faster.
2016-03-17 22:56:34 +01:00
Thomas Nagy ddead0ed59
Simplification: use dict.update() 2016-03-16 23:01:49 +01:00
Thomas Nagy b63ae9b2ef
Code simplification 2016-03-16 22:37:18 +01:00
Thomas Nagy e19c0e7e77
Simplification, no need to use item ids anymore 2016-03-16 20:11:24 +01:00
Thomas Nagy 0970eb86cb
docs 2016-03-15 22:06:10 +01:00
Thomas Nagy 5bf2132211
docs 2016-03-15 19:26:31 +01:00
Thomas Nagy 381337357e
docs 2016-03-13 09:17:09 +01:00
Thomas Nagy 83c237ffe0
Redundant repr() call 2016-03-12 12:35:09 +01:00
Thomas Nagy d81dfac34e
docs 2016-03-12 12:32:27 +01:00
Thomas Nagy 89ac2f0215
Issue 1594 2016-03-09 22:25:52 +01:00
Thomas Nagy d45b8447a8
docs 2016-03-08 21:28:20 +01:00
Thomas Nagy e6bb4693cb No need for update_outputs in waf 1.9 2016-03-08 19:18:18 +01:00
Thomas Nagy b08125520f
Remove waf.asc after producing a signed waf file 2016-03-08 19:16:49 +01:00
Thomas Nagy 42622a6e52
Do not cache Waf tools in configure 2016-03-07 23:38:14 +01:00
Thomas Nagy 3cac9c7077
Node objects can be folders too, but dependencies must be managed manually 2016-03-07 21:12:51 +01:00
Thomas Nagy 6768a4cb38
Unbind task.last_cmd when the command is successful 2016-03-06 17:23:24 +01:00
Thomas Nagy 0484caf3d6
docs 2016-03-06 13:19:14 +01:00
Thomas Nagy 333aec0b96
Removed Utils.nogc as it is unused 2016-03-05 11:45:16 +01:00
Thomas Nagy b95db27d05
Micro-optimization 2016-03-05 11:05:43 +01:00
Thomas Nagy 64af7a67bb
clang quirks - Issue 1714 2016-03-04 19:23:14 +01:00
Thomas Nagy a8a918763f
Missing output with -j1 2016-03-03 23:36:18 +01:00
Thomas Nagy 028ecf43df
Workaround for unreadable home folders 2016-03-01 22:45:39 +01:00
Thomas Nagy 0ab704f5a4 Minor optimization in Utils.h_list 2016-02-29 18:40:44 +01:00
Thomas Nagy b4437f3b51
Exception handling enhancements 2016-02-28 14:23:54 +01:00
Thomas Nagy 3ced4c6695
Utils.ex_stack is the same as traceback.format_exc as we are no longer on Python 2.3 2016-02-28 12:23:18 +01:00
Thomas Nagy 08a39b7b19
Ironpython does not have += on deques 2016-02-28 11:37:00 +01:00
Thomas Nagy 126fc7e4b4
Missing piece of code 2016-02-28 11:30:18 +01:00
Thomas Nagy 1524d74301
Missing line 2016-02-28 10:34:32 +01:00
Thomas Nagy df956ed5c5
Better task cleanup logic 2016-02-28 10:13:03 +01:00
Thomas Nagy 248d89e85b
Use deques 2016-02-28 10:01:43 +01:00
Thomas Nagy 220ac6de5e
Pre-fork processes for Python2 2016-02-28 00:12:50 +01:00
Thomas Nagy 9dbcc4274b
Fixed the broken logic in process execution 2016-02-27 09:37:04 +01:00
Daniel Bartel 015f522fb3 add option for line length to cpplint 2016-02-26 23:11:37 +01:00
Thomas Nagy 1f95d2c4cb
Popen objects provide pid (not getpid) 2016-02-26 21:23:49 +01:00
Thomas Nagy 5bf16d51d8
Lockless list of processes 2016-02-26 21:09:50 +01:00
Thomas Nagy 0ce499c24c Revert "Make D dependency scanner aware of package.d files"
This reverts commit a61528efc3.
2016-02-26 21:05:13 +01:00
Alexander Afanasyev b99a82ddfe Boost module enhancements and fixes
- Output detected version of boost in dot-form (e.g., 1.56.0, instead of 1_56)
- Fix Boost.Log library detection:
  * when linking to shared library, BOOST_LOG_DYN_LINK needs to be defined
  * when linking to non-multithreaded version, BOOST_LOG_NO_THREADS needs to be defined

  (see http://www.boost.org/doc/libs/1_60_0/libs/log/doc/html/log/installation/config.html)
2016-02-26 21:04:50 +01:00
Thomas Nagy 1ee5adc3b3
Error handling enhancements 2016-02-26 20:11:58 +01:00
Thomas Nagy f56f22bb50
Prefix by # to have the artifacts at the root of the build directory 2016-02-26 19:25:23 +01:00
Thomas Nagy d131a37ac9
No new processes needed on IronPython 2016-02-26 18:52:43 +01:00
Thomas Nagy 75e9735a22
Python3 fixes 2016-02-26 18:36:38 +01:00
Thomas Nagy 023c540b80
Simplifications - child processes will exit on broken pipes 2016-02-25 22:58:11 +01:00
Thomas Nagy e0b080b7c6
Jython fix 2016-02-25 22:28:00 +01:00
Thomas Nagy b2bcee43cb
Python 3 fixes 2016-02-25 21:53:17 +01:00
Thomas Nagy 8207a878a9
Enable multiprocessing for faster subprocess execution 2016-02-25 20:03:07 +01:00
Thiago da Silva Andrade Soares =^.~= 4bea5a28ae Cppcheck tool - Fix creation of invalid command on windows
The following error occurring when we try to run the cppcheck tool on windows.
As we see in the error message, the command is not well formed.

WafError:
    Command "['C:\\\\Program Files (x86)\\\\Cppcheck\\\\cppcheck.exe'] --inconclusive --report-progress --verbose --xml ..."
returned 1
2016-02-24 21:53:15 +01:00
Thomas Nagy e176101c8c
Nicer configuration message on ruby detection 2016-02-24 07:16:04 +01:00
Thomas Nagy df8e144631 Smarter detection of programs passed to the command-line 2016-02-23 22:59:29 +01:00
Thomas Nagy 9147e9128a
Cleanup: unnecessary semicolons in Python code 2016-02-19 23:26:40 +01:00
Thomas Nagy a02a0b54b3
Limit caching unnecessary data in preproc.py 2016-02-19 23:26:19 +01:00
Thomas Nagy 589a99fca3
Exit status must be non-zero when tests fail 2016-02-19 22:29:01 +01:00
Thomas Nagy 2d89937205
-DFOO in compiler commands - Issue 1704 2016-02-18 21:56:02 +01:00
Thomas Nagy 7e16c7cb1e
Removed bld.returned_tasks 2016-02-15 23:52:11 +01:00
Thomas Nagy 0bafa590f3
Trim less in lru_cache 2016-02-15 23:23:34 +01:00
Thomas Nagy 31381f9b63
Cache Node signatures on the context level 2016-02-15 23:04:30 +01:00
Guillaume Poirier-Morency c4bfce0fe7 vala: Initialize 'VALAFLAGS' with OS flags 2016-02-15 21:54:35 +01:00
Thomas Nagy 0441d01545
Added the missing __getitem__ method on lru_cache 2016-02-15 21:13:48 +01:00
Thomas Nagy 4e09a1bc5a
New lru caches in preproc.py to limit memory overconsumption 2016-02-15 00:46:44 +01:00
Thomas Nagy 22fae4ebef
From now on, ensure that buildcontext classes have a producer 2016-02-15 00:46:39 +01:00
Thomas Nagy 4be840bd7a
Reduced Task size (~700B/task) 2016-02-15 00:46:35 +01:00
Thomas Nagy 2897bcfd81
Reduced Task size (~600B/task) 2016-02-15 00:46:27 +01:00
Thomas Nagy 6bbcce206b
Better value for Utils.SIG_NIL 2016-02-14 11:15:52 +01:00
Thomas Nagy 437bfda8d1
Use waflib.Build.SAVED_ATTRS for serialization and initialization
The purpose is to make it easier to serialize additional dicts
on BuildContext instances.
2016-02-14 11:10:38 +01:00
Thomas Nagy 6c372e24fc
Issue 1701 - cpplint 2016-02-13 00:21:37 +01:00
Guillaume Poirier-Morency 70e49cc038 valadoc: Include the '--vala-target-glib' flag 2016-02-12 07:21:28 +01:00
SirNickolas a61528efc3 Make D dependency scanner aware of package.d files 2016-02-11 21:43:32 +01:00
Thomas Nagy 5580e8c69f
Use subprocess32 when possible 2016-02-10 23:46:55 +01:00
Thomas Nagy 70df345c3f
Use the lru implementation when present (Python3) 2016-02-10 23:42:30 +01:00
Thomas Nagy 82b3ade500
Clear the c dependency scanner cache to prevent excessive memory consumption 2016-02-10 00:07:07 +01:00
Thomas Nagy 29cd350170
Use Node.exists when possible 2016-02-09 22:12:39 +01:00
Thomas Nagy f1f2e8f8bc
Slightly better error message for inexisting nodes 2016-02-09 22:05:12 +01:00
Thomas Nagy 6124ee6975
Removed an old and unnecessary wrapper for objects in deps_man 2016-02-09 22:03:20 +01:00
Thomas Nagy f7ed95d60e
Missing configuration files should raise an instance of WafError 2016-02-08 22:41:12 +01:00
Thomas Nagy 6d6222bc18
Unnecessary variable duplication 2016-02-06 13:03:43 +01:00
Kenneth Zhao b8a1675123
Add SUN cc compiler version 5.0 2016-02-04 07:23:34 +01:00
Guillaume Poirier-Morency 8c8b0d8f0b
Apply 'Utils.to_list' on 'vala_defines' and include it in 'valadoc' tool 2016-02-04 07:23:10 +01:00
Jérôme Carretero bc80ea97ae waflib: extras: rst: update scan to provide dependent directive type 2016-02-01 21:59:59 -05:00
Jérôme Carretero c923c31031 extras: rst: extend parse_rst_node() 2016-01-30 13:07:29 -05:00
Thomas Nagy 2999a120a1
Missing cwd handling in exec_command 2016-01-30 16:59:35 +01:00
Thomas Nagy 361e4b7730
Enable vnum for libraries created in the source directory 2016-01-30 11:39:18 +01:00
Thomas Nagy 5b82ce528c
No more 'missing node signature' errors 2016-01-28 22:45:37 +01:00
Thomas Nagy c0cfbd6a36
docs 2016-01-27 23:54:35 +01:00
Thomas Nagy 12114e3429
typo 2016-01-27 23:53:23 +01:00
Thomas Nagy e10998ff54
Solution file generation example 2016-01-26 20:00:07 +01:00
Ivan Tubert-Brohman 9a7381b20e
No-op in netcache run/post_run if nocache is true
When a task class has a true value for the nocache attribute,
setup_nocache doesn't decorate the run() and post_run() methods of the
class. In most cases, however, that's not enough to disable caching
because the base Task class is still modified; any class based on Task
which doesn't override these methods will still use caching even if it
sets nocache to True. This is solved by having the decorated versions of
run() and post_run() do nothing except call the original version of the
method when the task object has a true value for self.nocache.
2016-01-25 20:40:52 +01:00
Ivan Tubert-Brohman 2a7e0de018
Do chmod in netcache post_run
This ensures that, for example, executable files that are fetched from
the cache end up with the right permissions.
2016-01-25 20:21:15 +01:00
Thomas Nagy 4dac0ea283
Do not include waflib.zip in 'waf dist' results 2016-01-24 23:51:58 +01:00
Thomas Nagy a8896c57a5
New option to create a waf file that takes its file list from a model archive 2016-01-24 11:38:10 +01:00
Thomas Nagy 5626104770
cleanup 2016-01-22 20:05:54 +01:00
Haakon Sporsheim f9e78b0225 c_config: Add xtensa as a known CPU. 2016-01-21 22:53:08 +01:00
Thomas Nagy a255ba93c6
Cleanup 2016-01-20 20:21:41 +01:00
Thomas Nagy 3f2e58b1a3
Disable verbose and mangling configuration tests with Intel Fortran 2016-01-20 18:19:07 +01:00
Harald Klimach df7d5669f0 Added export definitions for typemap in the demos/fortran project. 2016-01-20 17:40:42 +01:00
Thomas Nagy cbaab2f1b0 Circular dependencies may require passing the same library several times to the linker 2016-01-20 17:40:08 +01:00
Thomas Nagy aac6e800eb
Import libraries for Intel Fortran 2016-01-20 00:12:42 +01:00
Thomas Nagy 872f77f8b5
Build fcprogram_test with Intel compiler 2016-01-19 21:08:48 +01:00
Harald Klimach d00b90986c Set FC_NAME also in find_ifort_win32. 2016-01-18 21:57:01 +01:00
Thomas Nagy 22e150e0cb conf.check(..., comment='some text') to help with large config.h files 2016-01-17 17:02:10 +01:00
Thomas Nagy 05a15b229e
Code cleanup 2016-01-17 14:32:23 +01:00
Thomas Nagy 8ffbb6db0a
Code cleanup 2016-01-17 14:25:57 +01:00
Thomas Nagy 139b3f7a05
Unused variable LINK 2016-01-17 03:55:19 +01:00
Thomas Nagy e91fbe2d1b
Intel Fortran manifest files 2016-01-17 03:27:30 +01:00
Thomas Nagy 66009e5777
Intel Fortran detection on Windows 2016-01-17 02:30:41 +01:00
Thomas Nagy 7a93e7e443 Added the windows Intel Fortran flags from Harald's branch 2016-01-16 22:50:14 +01:00
Thomas Nagy 101dc83283 Detect newer sun compilers Issue 1686 2016-01-16 21:18:08 +01:00
Thomas Nagy 5b0e88adeb
Changed the cwd - working folders must be given as node objects 2016-01-16 13:03:09 +01:00
Thomas Nagy a167bcce5f
Better error message 2016-01-15 23:53:17 +01:00
Bálint Aradi d1ebc6f308 Fixing version flag for NAG compiler. 2016-01-15 00:14:37 +01:00
Thomas Nagy adc1ce1375
Simplification: added Task.get_cwd() 2016-01-11 05:25:46 +01:00
Thomas Nagy 85157243c4
Version number for waf 1.9 2016-01-11 03:20:07 +01:00
Thomas Nagy c016a5761e Missing variable dependency in compile_fun_shell for 2016-01-11 03:10:50 +01:00
Thomas Nagy b716d1ffb2
Docs, #1682 2016-01-07 15:27:54 +01:00
Thomas Nagy b9c41afdbc
docs 2016-01-06 18:33:03 +01:00
Thomas Nagy 47196bf688
docs 2016-01-06 18:27:47 +01:00
Thomas Nagy 331dd9f96c
Commands executed without a shell will merge flags of the form 2016-01-06 17:53:55 +01:00
Thomas Nagy d23490287a
Code simplifications - use enumerate 2016-01-06 14:53:18 +01:00
Harald Klimach 7541929609 Do not set the ARFLAGS unconditionally to rcs for ifort.
Instead, try invoke search for ar after looking for xiar.
2016-01-06 12:38:31 +01:00
Thomas Nagy 3430e18205
New option in waf_unit_tests --clear-failed - Issue 1678 2016-01-05 15:20:56 +01:00
Thomas Nagy 25ce2ac6da
docs - the latest cpython version we know of is 3.5 2016-01-03 13:47:53 +01:00
Thomas Nagy 69e51290fd Made this project build on Linux 2016-01-03 06:54:21 +01:00
Thomas Nagy 8083205b81 Additional merges from #1666 2016-01-03 05:08:10 +01:00
Thomas Nagy 43e26b5bef
cwd must be a Node object 2016-01-02 01:54:52 +01:00
Thomas Nagy 7b26ce74d1
Updated the cwd logic in glib2.py 2016-01-02 01:37:20 +01:00
Thomas Nagy e36420d68b
No chmod value for symlink_as at this time 2016-01-02 01:10:08 +01:00
Thomas Nagy 017d7a6257
Typo 2016-01-02 01:04:08 +01:00
Thomas Nagy da97d28d18
Fixed undefined variables 2016-01-02 00:58:38 +01:00
Thomas Nagy aa35adec74
docs: fixed 'document is not included in any toctree' 2016-01-02 00:56:33 +01:00
Thomas Nagy 2ebaf537c7
Removed the qt4 and kde4 modules from the apidocs 2016-01-02 00:50:21 +01:00
Thomas Nagy a3e014b0ae Enable lazy Visual Studio detection by default 2015-12-25 19:28:29 +01:00
Thomas Nagy 4111d559b4 docs 2015-12-25 18:06:18 +01:00
Thomas Nagy f73d3f1a2f Misleading attribute never_skip, replaced by always_run 2015-12-25 17:54:10 +01:00
Thomas Nagy 6aa1c74798 docs 2015-12-25 17:54:07 +01:00
Thomas Nagy ad2f3d420c Setting node signatures clears cached values if present 2015-12-25 17:54:02 +01:00
Thomas Nagy 4fdd8a520d Task cwd must be a node object 2015-12-24 23:10:56 +01:00
Thomas Nagy 8d3111235f Try to de-duplicate environment-provided flags such as CFLAGS or LINKFLAGS 2015-12-24 22:52:19 +01:00
Thomas Nagy d1fdf2f16a Removed the default include paths that were always added to vala 2015-12-24 22:49:22 +01:00
Thomas Nagy 2d36bfe7ff Removed the unused 'dummy' function from fc.py 2015-12-24 22:46:27 +01:00
Thomas Nagy 96a4487a57 New option to install files when symlinks are not possible 2015-12-24 22:45:27 +01:00
Thomas Nagy 5a3a89b4de Stop adding incompatible task data into the same dict objects 2015-12-24 18:36:48 +01:00
Thomas Nagy 6648d3e6e7 Docs 2015-12-24 18:36:45 +01:00
Thomas Nagy 06c7c09681 Provide node.exists() to increase filesystem abstraction 2015-12-24 18:36:42 +01:00
Thomas Nagy 72fda8ae36 Reduce the size of the build pickle file 2015-12-24 18:36:38 +01:00
Thomas Nagy ddaf29b78d Process CPPFLAGS at the end of commands 2015-12-23 19:26:34 +01:00
Thomas Nagy 281148b8eb Removed the old __eq__ and __hash__ which are not useful anymore in recent interpreters 2015-12-23 19:16:31 +01:00
Thomas Nagy e365a30215 Cache file hashes for performance reasons 2015-12-23 18:23:14 +01:00
Thomas Nagy 7681bddfb7 Remove Node.sig and Node.cache_sig 2015-12-23 17:55:44 +01:00
Thomas Nagy db31168eb6 New class attribute Task.never_skip to enable tasks to be always executed (the class decorator will be phased out) 2015-12-23 17:55:44 +01:00
Thomas Nagy 2ab00f7f49 Removed Node.cache_sig 2015-12-23 17:55:44 +01:00
Thomas Nagy 6ecd0d22c3 Let run_once process a list of arguments 2015-12-23 17:55:44 +01:00
Thomas Nagy 04449361e8 Detect clang first on FreeBSD, NetBSD, etc 2015-12-23 17:55:44 +01:00
Thomas Nagy e1d82be8a5 The tool kde4 is not included by default in waf 1.9 2015-12-23 17:55:44 +01:00
Thomas Nagy 972d8e4904 The tool qt4 is not included by default in waf 1.9 2015-12-23 17:55:44 +01:00
Thomas Nagy d3f788da4c Added the tool called 'nobuild' to help troubleshoot build scripts 2015-12-23 17:55:44 +01:00
Thomas Nagy b58a7d8057 Removed the command called 'update' 2015-12-23 17:55:44 +01:00
Thomas Nagy 8b74beb233 Removed the split functions from Node.py 2015-12-23 17:54:41 +01:00
813 changed files with 26024 additions and 46784 deletions

11
.gitignore vendored
View File

@ -8,6 +8,9 @@ build
demos/*/build*
playground/*/build*
.waf-*
waf-*
.waf3-*
waf3-*
*.log
.DS_Store
.AppleDouble
@ -34,3 +37,11 @@ Network Trash Folder
Temporary Items
.apdisk
# Windows build output
waf.bat
# Vim temporary files
*.swp
# YouCompleteMe configuration
.ycm_extra_conf.py

292
.pipelines/Jenkinsfile vendored Normal file
View File

@ -0,0 +1,292 @@
pipeline {
agent none
stages {
stage('Build and Lint') {
parallel {
stage('Python 2.7') {
agent {
label "ubuntu"
}
steps {
sh 'python3 ./waf-light'
sh 'python2.7 ./waf --help'
stash includes: 'waf', name: 'waf'
}
}
stage('Python 3.6') {
agent {
label "freebsd"
}
steps {
sh 'python3.6 ./waf-light'
}
}
stage('Deprecation warnings') {
agent {
label "ubuntu"
}
steps {
sh '''
cd waflib
find . -iname "*.pyc" -exec rm -f {} \\; || true
! (((PYTHONWARNINGS=all python3.6 -m compileall . > /dev/null) 2>&1 ) 2>&1) | grep -i DeprecationWarning
'''
}
}
stage('Pyflakes') {
agent {
label "freebsd"
}
steps {
sh '''
cd waflib
var=`(/usr/local/bin/pyflakes3.py *.py Tools/*.py extras/*.py 2>&1) | egrep "undefined name|invalid syntax|inconsistent use|unindent does not match any outer indentation level" | wc -l`
if [ "0" -eq "$var" ]
then
/usr/local/bin/pyflakes3.py *.py Tools/*.py extras/*.py || true
else
# just do it again and fail
/usr/local/bin/pyflakes3.py *.py Tools/*.py extras/*.py
exit 1
fi
'''
}
}
stage('Unit tests') {
agent {
label "fedora"
}
steps {
sh '''
./waf-light
cd tests/preproc/
../../waf distclean
../../waf configure build
cd ../..'''
sh '''
cd tests/install/
../../waf distclean
../../waf configure build
cd ../..'''
sh '''
cd tests/general/
../../waf distclean
../../waf configure build
cd ../..'''
sh '''
export PATH=$PATH:$PWD
cd tests/init/
../../waf distclean
../../waf configure build
cd ../..'''
sh '''
export WAF_TEST_GROUP=waftest
cd tests/install_group/
../../waf distclean
../../waf configure build
'''
}
}
}
}
stage('Integration') {
parallel {
stage('Ubuntu') {
stages {
stage('py25') {
agent {
label "ubuntu"
}
steps {
dir('demos') {
unstash 'waf'
}
sh '''cd demos; LD_LIBRARY_PATH=/opt/lib ./waf distclean configure clean build --top=c'''
sh '''cd demos; LD_LIBRARY_PATH=/opt/lib ./waf distclean configure clean build --top=c++'''
sh '''cd demos; LD_LIBRARY_PATH=/opt/lib ./waf distclean configure clean build --top=java'''
sh '''cd demos; LD_LIBRARY_PATH=/opt/lib ./waf distclean configure clean build --top=perl'''
sh '''cd demos; LD_LIBRARY_PATH=/opt/lib ./waf distclean configure clean build --top=python'''
sh '''cd demos; LD_LIBRARY_PATH=/opt/lib ./waf distclean configure clean build --top=qt5'''
sh '''cd demos; LD_LIBRARY_PATH=/opt/lib ./waf distclean configure clean build --top=subst'''
}
}
stage('py36') {
agent {
label "ubuntu"
}
steps {
dir('demos') {
unstash 'waf'
}
sh '''cd demos; python3 ./waf configure clean build --top=c'''
sh '''cd demos; python3 ./waf configure clean build --top=c++'''
sh '''cd demos; python3 ./waf configure clean build --top=java'''
sh '''cd demos; python3 ./waf configure clean build --top=perl'''
sh '''cd demos; python3 ./waf configure clean build --top=python'''
sh '''cd demos; python3 ./waf configure clean build --top=qt5'''
sh '''cd demos; python3 ./waf configure clean build --top=subst'''
}
}
stage('py27') {
agent {
label "ubuntu"
}
steps {
dir('demos') {
unstash 'waf'
}
sh '''cd demos; ./waf configure clean build --top=c'''
sh '''cd demos; ./waf configure clean build --top=c++'''
sh '''cd demos; ./waf configure clean build --top=java'''
sh '''cd demos; ./waf configure clean build --top=perl'''
sh '''cd demos; ./waf configure clean build --top=python'''
sh '''cd demos; ./waf configure clean build --top=qt5'''
sh '''cd demos; ./waf configure clean build --top=subst'''
}
}
}
}
stage('OpenBSD') {
stages {
stage('Jython') {
agent {
label "openbsd"
}
steps {
sh '''
export WAF_NO_PREFORK=1
python3 ./waf-light
cp waf demos/c
cd demos/c
/home/jenkins/jython/bin/jython ./waf distclean configure clean build
'''
}
}
stage('py38') {
agent {
label "openbsd"
}
steps {
dir('demos') {
unstash 'waf'
}
sh '''cd demos/asm; python3 ../waf configure clean build'''
sh '''cd demos/c; python3 ../waf configure clean build'''
sh '''cd demos/c++; python3 ../waf configure clean build'''
sh '''cd demos/glib2; python3 ../waf configure clean build'''
sh '''cd demos/perl; python3 ../waf configure clean build'''
sh '''cd demos/python; python3 ../waf configure clean build'''
sh '''cd demos/subst; python3 ../waf configure clean build'''
}
}
}
}
stage('Windows') {
stages {
stage('C/py34') {
agent {
label "windows"
}
steps {
bat ''' C:/Python34/python.exe waf-light --tools=msvs '''
bat '''
copy waf demos\\c /Y
cd demos\\c
C:/Python34/python.exe waf distclean
C:/Python34/python.exe waf configure --no-msvc-lazy build -v
'''
bat '''
copy waf demos\\qt5 /Y
cd demos\\qt5
C:/Python34/python.exe waf distclean
C:/Python34/python.exe waf configure --no-msvc-lazy build -v
'''
bat '''
copy waf playground\\msvs /Y
cd playground\\msvs
C:/Python34/python.exe waf distclean
C:/Python34/python.exe waf configure
C:/Python34/python.exe waf msvs
'''
}
}
stage('C/Msys2/py27') {
agent {
label "windows"
}
steps {
unstash 'waf'
bat '''
copy waf demos\\c /Y
cd demos\\c
set MSYSTEM=MINGW64
set WD=C:\\msys64\\usr\\bin
set CHERE_INVOKING=1
C:\\msys64\\usr\\bin\\sh --login -c 'exec /bin/bash -c "python waf configure clean build && python waf distclean"'
'''
}
}
stage('C/Msys2/py35') {
agent {
label "windows"
}
steps {
unstash 'waf'
bat '''
copy waf demos\\c /Y
cd demos\\c
set MSYSTEM=MINGW64
set WD=C:\\msys64\\usr\\bin
set CHERE_INVOKING=1
C:\\msys64\\usr\\bin\\sh --login -c 'exec /bin/bash -c "python3 waf configure clean build && python3 waf distclean"'
'''
}
}
}
}
stage('FreeBSD') {
stages {
stage('py36') {
agent {
label "freebsd"
}
steps {
dir('demos') {
unstash 'waf'
}
sh '''cd demos/c; python3.6 ../waf distclean configure clean build'''
sh '''cd demos/c++; python3.6 ../waf distclean configure clean build'''
sh '''cd demos/java; python3.6 ../waf distclean configure clean build'''
sh '''cd demos/jni; python3.6 ../waf distclean configure clean build'''
sh '''cd demos/perl; python3.6 ../waf distclean configure clean build'''
sh '''cd demos/python; python3.6 ../waf distclean configure clean build'''
sh '''cd demos/ruby; python3.6 ../waf distclean configure clean build'''
sh '''cd demos/glib2; python3.6 ../waf distclean configure clean build'''
sh '''cd demos/qt5; python3.6 ../waf distclean configure clean build'''
sh '''cd demos/dbus; python3.6 ../waf distclean configure clean build'''
}
}
}
}
stage('MacOS') {
stages {
stage('py27') {
agent {
label "macos"
}
steps {
dir('demos') {
unstash 'waf'
}
sh '''cd demos/c; ../waf distclean configure clean build'''
sh '''cd demos/python; ../waf distclean configure clean build'''
sh '''cd demos/mac_app; ../waf distclean configure clean build'''
}
}
}
}
}
}
}
}

197
ChangeLog
View File

@ -1,165 +1,40 @@
NEW IN WAF 1.8.17
-----------------
* Added customizations that enable building whole projects from the build folder instead of the variant folder
* Added a project generator for Xcode 6 #1648
* Force scanner functions to run after task failures #1660
* Improved the Intel Fortran compiler detection #1655
* Added processing of chmod attributes on subst and rule when provided #1650
* Enabled global_define in conf.check() tests
* Enabled usage of home folder/tilde ~ in Configure.find_files
* Added usage of options.enable_gccdeps when provided by user scripts
* Enabled 'waf -v' to catch invalid string on hcode values in Python3
* Fixed the function names returned by the @conf and @run_once decorators
* Let 'subst' change permissions for all its files with chmod (not just the first one)
* Added quoting for space-containing-arguments in print_commands.py
NEW IN WAF 1.8.16
-----------------
* Reverted the changes to conf.check(header_name=) as this causes regressions. Use conf.check(header_name=, link_header_test=False) - #1647
* Disabled the loading of c_emscripten when building from the Waf tree
* Fixed the documentation build when using Sphinx < 1.3
* Propagate ldflags/LDFLAGS besides linkflags/LINKFLAGS
* Python3 fixes in extras/file_to_object.py
NEW IN WAF 1.8.15
-----------------
* Enabled multiple commands in run_str/rule
* Fixed conf.check(header_name=) so that it does not link test by default
* Added a workaround for non-standard python installations (Python bug 7352) - #1636
* Enabled conf.check_cfg to use conf.env.env as os environment if provided
* Enabled relative paths in --top and --out
* Enabled gzip compression for Waf file creation with Jython
* Added a workaround for building projects using IronPython
* Added a workarounds for pkg-config usage within msys2 and for inconsistent Python 2 paths
NEW IN WAF 1.8.14
-----------------
* Fixed the Visual Studio detection on Python 3 when --msvc_lazy_autodetect is not provided (regression)
* Enable vala processing on a folder basis with the vala_dir parameter - #1601
* Enable vala resource processing - #1626
* Minor documentation updates - #1605
NEW IN WAF 1.8.13
-----------------
* Exposed the Popen parameters input/timeout to cmd_and_log/exec_command (timeout is for Python >= 3.3)
* Added 'with_sys_path' to Context.load_tool to use/skip sys.path
* Changed gccdeps so that it handle '..' within paths
* env = conf.env.derive().detach()
* Changed Sun compiler's default flags from -Kpic to -xcode=pic32 - #1625
* Added bld(rule=, ..., cls_str=, cls_keyword=) for more descriptive outputs - #1598
* Added a lazy Visual Studio detection option --msvc_lazy_autodetect - #1614
* Changed the definition of function tests to prevent warnings with gcc - #1622
NEW IN WAF 1.8.12
-----------------
* Fixed a regression when building in sub-folders - https://github.com/waf-project/waf/issues/1590
* New mac_files attribute which is expected to replace mac_resources in waf 1.9 (demos/mac_app/)
* env = env.derive().detach() to simplify deep copies
NEW IN WAF 1.8.11
-----------------
* Fortran fixes https://github.com/waf-project/waf/issues/1580
* Enabled installation of generated .py files
* Fixed the '--threading' option for valac https://github.com/waf-project/waf/issues/1577
* Shared library compatibility version handling on OSX
NEW IN WAF 1.8.10
-----------------
* Replace cygwin paths in solution files - https://github.com/waf-project/waf/issues/1562
* Fixed the hcode in why.py - https://github.com/waf-project/waf/issues/1561
* Enabled execution from any folder: "waf configure --top=/arbitrary/folder --out=/tmp/build"
* Enabled stateless out-of-tree builds by default: "waf configure --no-lock-in-top --no-lock-in-run"
* Fixed the waf file generation on windows in Waf 1.8.9
* Add OS flags such as LDFLAGS only once - https://github.com/waf-project/waf/issues/1574
* Fixed conf.multicheck error handling
NEW IN WAF 1.8.9
NEW IN WAF 2.1.1
----------------
* VS 2013 supports cross-compiling for x86 and arm from amd64
* Perl detection enhancements on Redhat systems
* More accurate rpath parsing in check_cfg
* Fixed some argparse regressions
* Fixed 'waf --version'
* Updated most project examples
NEW IN WAF 1.8.8
----------------
* Fixed a regression in Fortran builds #1546
* Fixed a regression in the libdir installation path on 32-bit ubuntu #1552
* Process -Bstatic and -Bdynamic in parse_flags (pkg-config tools)
* Fortran compiler detection to cover the sxf03 as well as the sxf90
* Jython detection enhancements
* Doxygen tool enhancements
* Moved the project to Github/waf.io and updated the documentation
CHANGES IN WAF 2.1.0
--------------------
* While the Waf file runs on Python 2 and 3, creating it requires Python 3
+ Added wafcache
+ waf_unit_test: Added task in returned tuples, custom reports should be adapted
~ Ensure ConfigurationContext.load and Context.load definitions are consistent and remove unused *k parameters
~ Remove the dependency on optparse and use argparse instead
- Remove waflib.Runner.PriorityTasks.appendleft
- Remove waflib.Task.TaskBase
- Remove the upper class of waflib.Task.Task (metaclass syntax)
- Remove Winphone/WinCE detection in msvc.py
- Remove conf.add_as_needed because it does not check for the flag usage
NEW IN WAF 1.8.7
----------------
* Fixed the default libdir installation suffix on Redhat 64-bit systems #1536
* Fixed the Python 2.6 detection on Redhat systems #1538
* Enabled gccdeps to work with clang
* Fixed the detection of clang from the gcc tools
* Added orig_run_str to help subclasses (do not use Task.hcode)
* Fixed the detection of older clang compilers versions
* NEC compiler support
* Enabled batched_cc.py to work with msvc too
* Enabled unity.py to process c files
* Faster dependency calculation in c_dumbpreproc
* New stracedeps example (cfg blog entry)
* Added support for xz compression in waf and waf dist (Python 3.5)
NEW IN WAF 1.8.6
----------------
* Python file installation fixes
* Fix for classes containing utf-8 names
* Hide the progress bar when running waf -ppp
* Support more header extensions in subst/is_copy
* Handle non-string and non-list values in substitutions (subst)
* Show how to track build files timestamps to force partial rebuilds (build_file_tracker.py)
* Added a new extension to detect blender libraries
* Added extras/prefork.py, extras/preforkunix.py and extras/preforkjava.py
* Updated demos/d
* Updated demos/vala
* Updated playground/protobuf
* Updated playground/cython
* Updated playground/dynamic_headers
* Updated playground/netcache
* Qt5 detection improvements
NEW IN WAF 1.8.5
----------------
* Enhanced Sun compiler detection #1510
* Fixed a regression in Emacs shell support #1511
* Fixed a regression in cross-directory builds (Linux only) #1512
* Executable wscript files #1517
* Generic script signing utility #1520
NEW IN WAF 1.8.4
----------------
* Various improvements in stale.py
* More robust file scanning in Qt processing #1502
* More robust handling of build order implied by hidden dependencies #1506
* Run msvs on Python 3 #1503
* Biber update #1501
* Fixed the Python detection on Windows #1498
NEW IN WAF 1.8.2
----------------
* Removed the modules c_* that were accidentally shipped and break pkg-config tests
NEW IN WAF 1.8.1
----------------
* Re-added compatible option group names from waf 1.7 #1495
* Fixed bld(define='') splitting which was disabled by mistake
NEW IN WAF 1.8.0
----------------
* Python 2.5 is now required
* Removed the Waf cache from the task level, use the netcache system
* Console handling improvements
* Properly-sized progress bar on windows
* Generic configuration tests
* Better unicode handling in scripts and in file names
* Shorter build outputs
* Prevent external static libraries propagation through uselib vars #1320
* LaTeX glossaries #1342 and multibib #1345
* Rst document processing
* Various improvements in the Python detection and processing
* Tons of bugfixes
CHANGES IN WAF 2.0.0
--------------------
* Provide a new priority system to improve scalability on complex builds
* Provide TaskGroup objects to improve scalability on complex builds
* Force new files into the build directory by default (use Node objects to bypass)
* Provide built-in support for building over UNC paths
* Simplify the Task class hierarchy; TaskBase is removed
* Display commands as string with "WAF_CMD_FORMAT=string waf build -v"
* Have ant_glob(..., generator=True) return a Python generator
* Accept nested lists and generators in bld(source=...)
* Sort TaskGen methods in alphabetical order by reversing TaskGen.prec order
- Remove 'ut_fun' from waf_unit_test.py
- Remove Node.sig and Node.cache_sig
- Remove the BuildContext.rule decorator
- Remove Task.update_outputs, Task.always_run
- Remove atleast-version, exact-version and max-version from conf.check_cfg
- Remove c_preproc.trimquotes
- Remove field_name, type_name, function_name from conf.check() tests
- Remove extras/mem_reducer.py as a better solution has been merged
- Remove Utils.ex_stack (use traceback.format_exc())

30
DEVEL
View File

@ -1,4 +1,4 @@
Waf 1.8 is on https://github.com/waf-project/waf
Waf 2.0 is on https://gitlab.com/ita1024/waf
------------------------------------------------
waflib the core library
@ -15,14 +15,26 @@ docs/sphinx project extracting the docstrings from the source code to crea
Documentation
-------------------------------------------------
API documentation https://waf.io/apidocs/
The Waf Book https://waf.io/book/
API documentation https://waf.io/apidocs/
The Waf Book https://waf.io/book/
Coding guidelines
-----------------
General coding guidelines
-------------------------
* We use tabs, no spaces
* Do not use x.split("\n") but x.splitlines()
* Do not catch all exceptions unless you have a good reason to do so (no "except:")
* File handles are too easy to get wrong, use Node.readf/Node.writef/Utils.readf/Utils.writef
* The code must run in both Python 2.6 to Python 3
* Use tabs for Python file indentation
* Use x.splitlines() instead of x.split('\n')
* Avoid "except:" and "except Exception:"
* Use Node.readf/Node.writef/Utils.readf/Utils.writef
Pull requests
-------------
See https://gitlab.com/ita1024/waf
When implementing complex features, please add examples in the showcase folder demos/
for modules under waflib/Tools, under tests/ for platform-independent unit tests,
or in playground/ for modules under waflib/extras.
The files under waflib/Tools/ are kept API-compatible for the duration
of a middle version (currently 2.0).

25
LICENSE Normal file
View File

@ -0,0 +1,25 @@
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
3. The name of the author may not be used to endorse or promote products
derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.

43
README
View File

@ -1,43 +0,0 @@
WHAT YOU WILL FIND HERE
-----------------------
Waf 1.8 - Recently moved to https://github.com/waf-project/waf
For the manual: https://waf.io/book/
For the API documentation: https://waf.io/apidocs/
For the examples: see the folder demos/ and the folder playground/
HOW TO CREATE THE WAF SCRIPT
----------------------------
Python 2.6, 2.7, 3.0, 3.1, 3.2, 3.3 or 3.4 is required to generate the waf script. The waf script is then the version that can run on Python 2.5.
Just execute:
$ ./waf-light configure build
Or, if you have several python versions installed:
$ python3 ./waf-light configure build
The Waf tools in waflib/extras are not added to the waf script. To add
some of them, use the --tools switch:
$ ./waf-light --tools=compat15,swig
To add a tool that does not exist in the folder extras, pass an absolute path, and
to customize the initialization, pass the parameter 'prelude'. Here is for example
how to create a waf file using the compat15 module:
$ ./waf-light --tools=compat15 --prelude=$'\tfrom waflib.extras import compat15\n'
Any kind of initialization is possible, though one may prefer the build system kit (folder build_system_kit):
$ ./waf-light --make-waf --tools=compat15,/comp/waf/aba.py --prelude=$'\tfrom waflib.extras import compat15\n\tprint("ok")'
Or if you do not want to regenerate the waf file all the time, set the WAFDIR environment variable to the directory containing "waflib".
HOW TO TRY THE EXAMPLES
-----------------------
Try this:
$ cp waf demos/c/
$ cd demos/c/
$ ./waf configure build
---------------------------
Thomas Nagy, 2014-2015 (ita)

View File

@ -1,16 +1,58 @@
# ABOUT WAF
Waf is a Python-based framework for configuring, compiling and installing applications. Here are perhaps the most important features of Waf:
* *Automatic build order*: the build order is computed from input and output files, among others
* *Automatic dependencies*: tasks to execute are detected by hashing files and commands
* *Performance*: tasks are executed in parallel automatically, the startup time is meant to be fast (separation between configuration and build)
* *Flexibility*: new commands and tasks can be added very easily through subclassing, bottlenecks for specific builds can be eliminated through dynamic method replacement
* *Extensibility*: though many programming languages and compilers are already supported by default, many others are available as extensions
* *IDE support*: Eclipse, Visual Studio and Xcode project generators (waflib/extras/)
* *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.4, Jython 2.5, IronPython, and Pypy
* *Automatic build order*: the build order is computed from input and output files, among others
* *Automatic dependencies*: tasks to execute are detected by hashing files and commands
* *Performance*: tasks are executed in parallel automatically, the startup time is meant to be fast (separation between configuration and build)
* *Flexibility*: new commands and tasks can be added very easily through subclassing, bottlenecks for specific builds can be eliminated through dynamic method replacement
* *Extensibility*: though many programming languages and compilers are already supported by default, many others are available as extensions
* *IDE support*: Eclipse, Visual Studio and Xcode project generators (`waflib/extras/`)
* *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.7 to 3.x, Jython 2.7 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 [the Samba project](https://www.samba.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://github.com/waf-project/waf/tree/master/build_system_kit) and [package distribution systems](https://github.com/waf-project/waf/tree/master/playground/distnet/README.rst).
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).
Download the project from our page on [waf.io](https://waf.io/) or from the mirror on [freehackers.org](http://www.freehackers.org/~tnagy/release/).
## HOW TO CREATE THE WAF SCRIPT
```sh
python ./waf-light configure build
```
## CUSTOMIZATION
The Waf tools in waflib/extras are not added to the waf script. To add
some of them, use the --tools switch. An absolute path can be passed
if the module does not exist under the 'extras' folder:
```sh
./waf-light --tools=swig
```
To customize the initialization, pass the parameter 'prelude'. Here is for example
how to create a waf file using the compat15 module:
```sh
./waf-light --tools=compat15 --prelude=$'\tfrom waflib.extras import compat15\n'
```
Although any kind of initialization is possible, using the build system kit
may be easier (folder build\_system\_kit):
```sh
./waf-light --make-waf --tools=compat15,/comp/waf/aba.py --prelude=$'\tfrom waflib.extras import compat15\n\tprint("ok")'
```
To avoid regenerating the waf file all the time, just set the `WAFDIR` environment variable to the directory containing "waflib".
## HOW TO RUN THE EXAMPLES
Try this:
```sh
cp waf demos/c/
cd demos/c/
./waf configure build
```

23
TODO
View File

@ -1,23 +0,0 @@
Waf 1.9
-------
* Reduce the key size in bld.task_sigs
* Provide a more efficient ConfigSet implementation
* Remove the split functions from Utils
* Ensure _cache.py are valid python files
* Include the tool 'nobuild' by default
* Set cflags in the beginning / cppflags at the end
* Remove qt4 from the default modules, rework qt5
* Remove the command called "update"
* Remove Node.cache_sig
* Make lazy visual studio detection the default
* Do not cache waf tool detection
* Fix the vala detection
* Better consistency between check_cfg and check_cc variables
* Detect Clang by default on FreeBSD instead of gcc
* Use relative paths in apply_incpaths (and absolute ones when paths cross drives)
* Let run_once accept a list of *args
* Let more context commands depend on the configuration
and all other issues listed on https://github.com/waf-project/waf/issues

View File

@ -30,4 +30,4 @@ A few examples are provided to illustrate the range of possibilities:
* nostate: use timestamps only, and no build directory (very make-like)
* extpy: a custom waf file able to read wscript files having the extension ".py"
Thomas Nagy, 2010-2011
Thomas Nagy, 2010-2016

View File

@ -27,7 +27,7 @@ class Context(mod.Context):
cache[node] = True
self.pre_recurse(node)
try:
function_code = node.read('rU')
function_code = node.read('r')
exec(compile(function_code, node.abspath(), 'exec'), self.exec_dict)
finally:
self.post_recurse(node)

View File

@ -39,16 +39,16 @@ def dump(bld):
bld.targets = []
# store the command executed
old_exec = Task.TaskBase.exec_command
old_exec = Task.Task.exec_command
def exec_command(self, *k, **kw):
ret = old_exec(self, *k, **kw)
self.command_executed = k[0]
self.path = kw['cwd'] or self.generator.bld.cwd
return ret
Task.TaskBase.exec_command = exec_command
Task.Task.exec_command = exec_command
# perform a fake build, and accumulate the makefile bits
old_process = Task.TaskBase.process
old_process = Task.Task.process
def process(self):
old_process(self)
@ -67,13 +67,13 @@ def dump(bld):
else:
bld.commands.append(' '.join(lst))
bld.commands.append('\tcd %s && %s' % (self.path, self.command_executed))
Task.TaskBase.process = process
Task.Task.process = process
# write the makefile after the build is complete
def output_makefile(self):
self.commands.insert(0, "all: %s" % " ".join(self.targets))
node = self.bldnode.make_node('Makefile')
node.write("\n".join(self.commands))
Logs.warn('Wrote %s' % node.abspath())
node.write('\n'.join(self.commands))
Logs.warn('Wrote %r', node)
bld.add_post_fun(output_makefile)

View File

@ -35,9 +35,8 @@ def build(bld):
elif tp == 'objects':
features = 'c'
source = Options.options.source
app = Options.options.app
bld(features=features, source=source, target=app)
bld(features=features, source=Options.options.source, target=app)
def recurse_rep(x, y):
f = getattr(Context.g_module, x.cmd or x.fun, Utils.nada)
@ -126,9 +125,3 @@ def c_hook(self, node):
# re-bind the extension to this new class
return self.create_compiled_task('c2', node)
# modify the existing class to output the targets in the same directory as the original files
Task.update_outputs(c2)
Task.update_outputs(waflib.Tools.c.cprogram)
Task.update_outputs(waflib.Tools.c.cshlib)
Task.update_outputs(waflib.Tools.c.cstlib)

View File

@ -20,7 +20,7 @@ def build(bld):
for x in txt.splitlines():
if not x:
continue
elif x.startswith('\t') or x.startswith(' '):
elif x.startswith(('\t', ' ')):
tg.rule = x.lstrip()
else:
line = x.split(':')

View File

@ -1,23 +1,22 @@
#include "header.h"
.text
.align 2
.section .data
.data
val:
.long SOME_VALUE
.text
.align 2
// Multiply input value by 421...
.global mult10
.type mult10, function
.type mult10, @function
mult10:
pushq %rbp
movq %rsp,%rbp
movl val,%eax
movabs val,%eax
imull %edi,%eax
popq %rbp
ret

View File

@ -18,10 +18,11 @@ def build(bld):
source = 'main.c test.S',
target = 'asmtest',
defines = 'foo=12',
includes = '.')
asflags = '-Os',
includes = '.',
linkflags = '-no-pie')
def disp(ctx):
node = ctx.bldnode.ant_glob('asmtest*', remove=False)[0]
ctx.exec_command('%s' % node.abspath(), shell=False)
bld.add_post_fun(disp)

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -0,0 +1 @@
100 icon "gfx/semfavicon.ico"

View File

@ -2,18 +2,18 @@
def write_header(tsk):
tsk.outputs[0].write('int abc = 423;\n')
bld(rule=write_header, target='b.h', ext_out=['.h'])
bld(features='use', rule=write_header, target='b.h', ext_out=['.h'], name='XYZ')
bld.program(
tg = bld.program(
features = 'aaa',
source = 'main.c',
includes = '. ..',
#cflags = ['-O3'], # for example
defines = ['foo=bar'],
target = 'myprogram',
use = 'M')
use = 'M XYZ')
# make main.c depend on wscript_build, just for the fun of it
# just for fun, make main.c depend on wscript_build
bld.add_manual_dependency('main.c', bld.path.find_resource('wscript_build'))
# ----------------------------------------
@ -34,3 +34,6 @@ class foo(waflib.Task.Task):
def run(self):
self.outputs[0].write('int kik = 343;\n')
if bld.env.CC_NAME == 'msvc':
tg.source += ' msvc_resource.rc'

View File

@ -3,6 +3,7 @@
bld.shlib(
source = 'test_shlib.c',
target = 'my_shared_lib',
name = 'xyz',
vnum = '1.2.3',
defs = 'foo.def')
@ -11,7 +12,7 @@ t = bld.program(
#features = 'my_precious',
source = 'main.c',
target = 'test_shared_link',
use = 'my_shared_lib',
use = 'xyz',
# 1. settings flags directly
#linkflags = ['-L/disk/comp/waf/demos/c/build/shlib', '-lmy_shared_lib']
)

View File

@ -0,0 +1,11 @@
#include <stdio.h>
#include "external_vars.h"
int k = 5;
void print_value_of_k() {
printf("K = %d\n", k);
}

View File

@ -0,0 +1,14 @@
/*
Export internal vars
*/
#ifndef _EXTERNAL_VARS_H
#define _EXTERNAL_VARS_H
extern int k; /* export k */
void print_value_of_k();
extern int r;
#endif /*_EXTERNAL_VARS_H */

View File

@ -0,0 +1,7 @@
# This is a static library that provides a header to include reference to
# internal variables.
bld.stlib(
target='A',
source='external_vars.c',
includes='.',
export_includes='.')

View File

@ -0,0 +1,12 @@
#include <stdio.h>
#include "sum.h"
#include "external_vars.h"
void sum(int j) {
printf("Adding %d...\n", j);
// Add our new value
k += j;
}

View File

@ -0,0 +1,10 @@
/*
Export internal vars
*/
#ifndef _SUM_H
#define _SUM_H
void sum(int j);
#endif /*_SUM_H */

View File

@ -0,0 +1,9 @@
# This script uses libA to do some internal logic. It uses the default
# behavior so it will be re-archived every time libA changes, even if
# changes in libA are only visible at runtime.
bld.stlib(
target='B',
source='sum.c',
use='A',
includes='.',
export_includes='.')

View File

@ -0,0 +1,13 @@
#include <stdio.h>
#include "diff.h"
#include "external_vars.h"
void diff(int j) {
printf("Subtracting %d...\n", j);
// subtract our new value
k -= j;
}

View File

@ -0,0 +1,10 @@
/*
Export internal vars
*/
#ifndef _DIFF_H
#define _DIFF_H
void diff(int j);
#endif /* _DIFF_H */

View File

@ -0,0 +1,10 @@
# This script uses the logic that prevents static libraries from depending on
# eachother. This means that the only way libC is re-archived is if the source
# code file diff.c or any of its depenencies change.
bld.stlib(
target='C',
source='diff.c',
features='skip_stlib_link_deps',
use='A',
includes='.',
export_includes='.')

22
demos/c/stlib-deps/main.c Normal file
View File

@ -0,0 +1,22 @@
#include <stdio.h>
#include "external_vars.h"
#include "sum.h"
#include "diff.h"
int main()
{
/* This should return to whatever the default value is. */
print_value_of_k();
sum(6);
print_value_of_k();
diff(8);
print_value_of_k();
sum(8);
print_value_of_k();
diff(6);
print_value_of_k();
return 0;
}

View File

@ -0,0 +1,11 @@
#! /usr/bin/env python
bld.recurse('libA')
bld.recurse('libB')
bld.recurse('libC')
# Note that main has an implied dependency between our main program and libA
bld.program(
source = 'main.c',
target = 'test_static_link_chain',
use = 'B C')

View File

@ -19,32 +19,57 @@ def options(opt):
def configure(conf):
conf.load('compiler_c gnu_dirs')
conf.check_cc(fragment="int main() { return 0; }\n")
# compile and link in the default mode, which is c++ if present
conf.check(fragment='int main() { return 0; }\n')
# just compile in c mode, and do not link
conf.check(fragment='int main() { return 0; }\n', features='c')
try:
conf.check_cc(fragment="int main() { return 0; }\n", execute=True) # 1
conf.check(fragment="int main(int argc, char* argv[]) { return 0; }\n", execute=True) # 1
except conf.errors.WafError:
Logs.warn('You are probably using a cross-compiler (disabling specific configuration tests)')
conf.check_library(test_exec=False)
else:
conf.check_cc(fragment="""#include<stdio.h>\nint main(){fprintf(stderr, "mu"); printf("%d", 22);return 0;}\n""", execute=True, define_name='HAVE_MU')
conf.check(fragment="""#include<stdio.h>\nint main(){fprintf(stderr, "mu"); printf("%d", 22);return 0;}\n""",
msg='Checking for exec results', execute=True, define_name='HAVE_MU')
conf.check(fragment='int main(int argc, char* argv[]) { return argc - 2;}',
msg='Checking for test arguments', test_args=['--foo=bar'], execute=True)
conf.check_library(test_exec=True)
conf.check_cc(lib='m', cflags='-Wall', defines=['var=foo', 'x=y'], uselib_store='M', mandatory=False)
conf.check(lib='m', cflags='-Wall', defines=['var=foo', 'x=y'], uselib_store='M', mandatory=False)
conf.check_large_file(mandatory=False)
conf.check_inline()
conf.check_endianness()
endianness = conf.check_endianness()
conf.define_cond("BIG_ENDIAN", endianness == "big")
def test_build(ctx):
ctx(rule='echo hello', shell=True, always=True)
# Configuration tests may even be re-used:
#ctx.in_msg = True # suppress console outputs
#ctx.check_large_file(mandatory=False)
conf.multicheck(
{'header_name':'stdio.h'},
{'header_name':'unistd.h'},
{'header_name':'stdlib.h'},
msg = 'Checking for standard headers',
mandatory = False
# list of conf.check() arguments
{'header_name':'stdio.h', 'msg':'... stdio', 'uselib_store': 'STDIO'},
{'header_name':'xyztabcd.h', 'msg':'... optional xyztabcd.h', 'mandatory': False},
{'header_name':'stdlib.h', 'msg':'... stdlib', 'okmsg': 'aye', 'errmsg': 'nope'},
{'func': test_build, 'msg':'... testing an arbitrary build function', 'okmsg':'ok'},
# parallelism control with after_tests/before_tests
{'header_name':'malloc.h', 'msg':'... malloc', 'uselib_store':'MALLOC', 'id':'malloc_t', 'mandatory':False},
{'header_name':'unistd.h', 'msg':'... unistd', 'uselib_store':'UNISTD', 'before_tests':['malloc_t'], 'mandatory':False},
msg = 'Checking for headers in parallel',
#mandatory = False, # set to False to make all tests non-mandatory
#run_all_tests = False # set to False to stop at the first error
)
conf.check_cc(header_name='stdio.h', auto_add_header_name=True)
#conf.check_cc(header_name='unistd.h')
conf.check_cc(fragment='int main() {return 0;}\n')
conf.check(header_name='stdio.h', auto_add_header_name=True)
#conf.check(header_name='unistd.h')
conf.check(fragment='int main() {return 0;}\n')
conf.write_config_header('config.h')
# exclude system libraries, force a particular folder (see strictlib below)
@ -53,7 +78,7 @@ def configure(conf):
def build(bld):
bld.env.DEFINES=['WAF=1']
bld.recurse('program stlib shlib')
bld.recurse('program stlib stlib-deps shlib')
#bld.install_files('/tmp/foo', 'wscript')
#bld.env.PREFIX='/tmp/foo'
bld.install_files('${PREFIX}/', 'program/a.h program/main.c', relative_trick=False)
@ -66,7 +91,16 @@ def build(bld):
bld.env.FOO =['m', 'ncurses']
bld.env.ST = '-L%s'
bld(rule='echo ${ST:FOO} ${ST:SRC}', always=True, source='wscript', shell=1)
bld.env.A = 'aye'
bld.env.B = 'doh'
bld.env.SRCA = ['aaa']
bld(rule='echo ${ST:FOO} ${ST:SRC} ${A}${B} ${ST:SRCA} ${ST:SRC[0].abspath()}',
always=True, source='wscript', shell=1, name='Shell')
if not Utils.is_win32:
bld(rule='echo ${ST:FOO} ${ST:SRC} ${A}${B} ${ST:SRCA} ${ST:SRC[0].abspath()}',
always=True, source='wscript', shell=0,
stdout=None, stderr=None, # disable synchronized outputs on this rule
cls_keyword=lambda x:'Trying again', name='NoShell')
# illustrate how to add a command 'foo' and to execute things in it
if bld.cmd == 'foo':

View File

@ -1,21 +0,0 @@
#! /usr/bin/env python
# encoding: utf-8
# Thomas Nagy, 2010 (ita)
VERSION = '1.0'
def options(opt):
opt.load('compiler_c')
def configure(conf):
conf.load('compiler_c dbus')
conf.find_program('glib-genmarshal') # required on a few systems
def build(bld):
tg = bld.program(
includes = '.',
source = bld.path.ant_glob('*.c'),
target = 'gnome-hello')
tg.add_dbus_file('test.xml', 'test_prefix', 'glib-server')

2
demos/fortran/foo.def Normal file
View File

@ -0,0 +1,2 @@
EXPORTS
FOO

View File

@ -0,0 +1,27 @@
submodule (parent) container
implicit none
contains
module procedure init
p%mother = mother
p%father = father
end procedure init
module subroutine harmonize(p)
type(parent_type), intent(inout) :: p
real :: avg
avg = 0.5 * (p%father + p%mother)
p%father = avg
p%mother = avg
end subroutine harmonize
module function parent_weight(p) result(w)
type(parent_type), intent(in) :: p
real :: w
w = p%mother**2 + p%father**2
end function parent_weight
end submodule container

View File

@ -0,0 +1,13 @@
submodule (parent:container) helper
implicit none
contains
module function parent_distance(pa, pb) result(dist)
type(parent_type), intent(in) :: pa, pb
real :: dist
dist = sqrt(parent_weight(pa) + parent_weight(pb))
end function parent_distance
end submodule helper

View File

@ -0,0 +1,30 @@
module parent
implicit none
type parent_type
real :: mother
real :: father
end type parent_type
interface
module subroutine init(p, mother, father)
type(parent_type), intent(out) :: p
real, intent(in) :: mother, father
end subroutine init
module subroutine harmonize(p)
type(parent_type), intent(inout) :: p
end subroutine harmonize
module function parent_weight(p) result(w)
type(parent_type), intent(in) :: p
real :: w
end function parent_weight
module function parent_distance(pa, pb) result(dist)
type(parent_type), intent(in) :: pa, pb
real :: dist
end function parent_distance
end interface
end module parent

View File

@ -0,0 +1,18 @@
program submain
use parent
implicit none
type(parent_type) :: a,b
real :: dist, weight
call init(a, 1.0, 2.0)
call init(b, 10.0, 12.0)
call harmonize(a)
weight = parent_weight(b)
write(*,*) weight
dist = parent_distance(a, b)
write(*,*) dist
end program submain

View File

@ -0,0 +1,26 @@
#! /usr/bin/env python
top = '.'
out = 'build'
def options(opt):
opt.load('compiler_c')
opt.load('compiler_fc')
def configure(conf):
conf.load('compiler_c')
conf.load('compiler_fc')
def build(bld):
bld(
features = 'fc fcshlib',
source = 'parent.f90 container.f90 helper.f90',
target = 'fudge',
)
bld(
features = 'fc fcprogram',
source = 'submain.f90',
use = 'fudge',
target = 'submain',
)

View File

@ -0,0 +1,2 @@
EXPORTS
EXAMPLE_MOD_mp_SUB1

View File

@ -11,14 +11,19 @@ def configure(conf):
conf.load('compiler_c')
conf.load('compiler_fc')
conf.check_fortran()
conf.check_fortran_verbose_flag()
conf.check_fortran_clib()
# configuration tests that may be totally irrelevant
conf.check_fortran_dummy_main()
if not conf.env.IFORT_WIN32:
conf.check_fortran_verbose_flag()
conf.check_fortran_clib()
conf.check_fortran_mangling()
def build(bld):
bld(
features = 'fc typemap fcshlib',
source = 'fsrc.f90 basetypes.f90',
defs = 'fsrc.def',
target = 'foo',
)
@ -28,9 +33,9 @@ from waflib import Logs, Build, Utils
from waflib import TaskGen, Task
from waflib.ConfigSet import ConfigSet
#@TaskGen.feature('typemap') <- python >= 2.4
#@TaskGen.after('process_source')
#@TaskGen.before('apply_link')
@TaskGen.feature('typemap')
@TaskGen.after('process_source')
@TaskGen.before('apply_link')
def process_typemaps(self):
"""
modmap: *.f90 + foo.in -> foo.h + foo.f90
@ -54,11 +59,6 @@ def process_typemaps(self):
tsk = self.create_compiled_task('fc', f90out)
tsk.nomod = True # the fortran files won't compile unless all the .mod files are set, ick
# for python 2.3
TaskGen.feature('typemap')(process_typemaps)
TaskGen.after('process_source')(process_typemaps)
TaskGen.before('apply_link')(process_typemaps)
class modmap(Task.Task):
"""
create .h and .f90 files, so this must run be executed before any c task
@ -166,25 +166,26 @@ end subroutine outer
return res
def write_type_map(bld, ctps, fort_file, c_header):
fort_file.write('''\
buf = ['''\
module type_maps
use, intrinsic :: iso_c_binding
implicit none
''', flags='w')
''']
for ctp in ctps:
fort_file.write('integer, parameter :: %s = %s\n' % (ctp.name, ctp.fc_type),
flags='a')
fort_file.write('end module type_maps\n', flags='a')
buf.append('integer, parameter :: %s = %s' % (ctp.name, ctp.fc_type))
buf.append('end module type_maps\n')
fort_file.write('\n'.join(buf))
cap_name = '%s__' % c_header.name.upper().replace('.', '_')
c_header.write('''\
buf = ['''\
#ifndef %s
#define %s
''' % (cap_name, cap_name), flags='w')
''' % (cap_name, cap_name)]
for ctp in ctps:
# This is just an example, so this would be customized. The 'long long'
# would correspond to the actual C type...
c_header.write('typedef long long %s\n' % ctp.name, flags='a')
c_header.write('#endif\n', flags='a')
buf.append('typedef long long %s\n' % ctp.name)
buf.append('#endif\n')
c_header.write('\n'.join(buf))
# vim:ft=python:noet

View File

@ -12,19 +12,15 @@ def options(opt):
opt.recurse('typemap')
def configure(conf):
conf.load('compiler_fc')
conf.load('compiler_c')
conf.load('compiler_fc')
if conf.env.FC_NAME == 'IFORT':
conf.env['FCFLAGS'] = ['-warn']
conf.env.append_unique('FCFLAGS', '-warn')
elif conf.env.FC_NAME == 'GFORTRAN':
conf.env['FCFLAGS'] = ['-Wall', '-W']
#conf.env['INCLUDES'] = ['hfloupi']
conf.env.append_unique('FCFLAGS', ['-Wall', '-W'])
conf.check_fortran()
conf.check_fortran_verbose_flag()
conf.check_fortran_clib()
conf.check_fortran_dummy_main()
conf.check_fortran_mangling()
conf.recurse('typemap')
def build(bld):
@ -43,6 +39,7 @@ def build(bld):
features = 'fc fcshlib',
source = 'foo.f',
target = 'shlib1',
defs = 'foo.def',
vnum = '2.3.9')
bld(
@ -81,3 +78,5 @@ def build(bld):
target = 'mod/two_mods')
bld.recurse('typemap')
if bld.env.FC_NAME == 'GFORTRAN' and int(bld.env.FC_VERSION[0]) >= 6:
bld.recurse('submodules')

View File

@ -0,0 +1,7 @@
<schemalist>
<schema id="org.gsettings.simple">
<key name="greeting" type="s">
<default>"Hello, world"</default>
</key>
</schema>
</schemalist>

View File

@ -8,6 +8,8 @@ APPNAME='glib2_test'
top = '.'
out = 'build'
import os
def options(opt):
opt.load ('compiler_c glib2')
@ -46,3 +48,10 @@ def build(bld):
source = 'org.glib2.test.gresource.xml',
install_path = 'lib/glib2_test'
)
# Install a schema to a different location.
# It will be compiled to a cache file besides it.
bld(
features = 'glib2',
settings_schema_files = ['org.gsettings.simple.gschema.xml']
).env.GSETTINGSSCHEMADIR = os.path.join('etc', 'glib-2.0', 'schemas')

View File

@ -4,13 +4,16 @@ from waflib import Utils
def build(bld):
if bld.cmd == 'install':
def post_update(bld):
try:
bld.exec_command(["update-mime-database", Utils.subst_vars("${DATADIR}/mime", bld.env)])
bld.exec_command(["update-desktop-database", Utils.subst_vars("${DATADIR}/applications", bld.env)])
except:
except Exception:
pass
if bld.cmd == 'install':
bld.add_post_fun(post_update)
bld(
features = "intltool_in",
podir = "../po",

View File

@ -8,7 +8,7 @@ def build(bld):
# javac
srcdir = 'src',
compat = '1.5',
compat = '8',
# jar
basedir = '.',

View File

@ -0,0 +1,14 @@
package org.example;
//import org.example.Animal;
import org.example.Cat;
class Bengala extends Cat {
public String sound() {
return "Bengala Meow!";
}
}

View File

@ -0,0 +1,12 @@
#! /usr/bin/env python
def build(bld):
bld(features = 'javac',
srcdir = 'src',
compat = '8',
use = 'cats-src',
name = 'bengala-cat',
recurse_use = True,
)

View File

@ -6,9 +6,10 @@ import org.example.Animal;
class Cat extends Animal {
public String sound() {
// Use base class just to be able to trigger possible rebuilds based on base class change
String base = super.sound();
return "Meow!";
}
}

View File

@ -4,7 +4,7 @@ def build(bld):
bld(features = 'javac',
srcdir = 'src',
compat = '1.5',
compat = '8',
use = 'animals',
name = 'cats-src',
)

View File

@ -36,10 +36,10 @@ def build(bld):
bld(features = 'javac jar javadoc',
srcdir = 'src/', # folder containing the sources to compile
outdir = 'src', # folder where to output the classes (in the build directory)
compat = '1.3', # java compatibility version number
compat = '8', # java compatibility version number
sourcepath = ['src', 'sup'],
classpath = ['.', '..'],
#jaropts = '-C default/src/ .', # can be used to give files
#jaropts = ['-C', 'default/src/', '.'], # can be used to give files
basedir = 'src', # folder containing the classes and other files to package (must match outdir)
destfile = 'foo.jar', # do not put the destfile in the folder of the java classes!
use = 'NNN',
@ -49,5 +49,5 @@ def build(bld):
javadoc_output = 'javadoc',
)
bld.recurse('animals cats')
bld.recurse('animals cats bengala')

View File

@ -1,6 +1,6 @@
#include "StringUtils.h"
#include <string.h>
#include <ctype.h>
JNIEXPORT jboolean JNICALL Java_StringUtils_isAlpha(JNIEnv *env, jclass clazz,
jstring jStr)

View File

@ -1,6 +1,7 @@
// waf sample Mac application - main.m
// Chris Pickel, 2011
#import <Foundation/Foundation.h>
#import <Cocoa/Cocoa.h>
int main(int argc, const char* argv[]) {

View File

@ -21,7 +21,7 @@ def configure(conf):
if not conf.env.ARCH_ST:
conf.fatal('This example is for macs only')
conf.env.FRAMEWORK_COCOA = 'Cocoa'
conf.env.ARCH_COCOA = ['i386', 'x86_64']
conf.env.ARCH_COCOA = ['x86_64', 'arm64']
def build(bld):
bld.program(

View File

@ -23,8 +23,7 @@ def build(bld):
#rule = '''echo -e "#include <stdio.h>\\nint main(){ printf(\\"%%d\\", $$RANDOM); return 0;}" > ${TGT}''',
rule = fun,
target = node,
always = True,
update_outputs = True)
always = True)
bld.program(
source = 'precious.c',

View File

@ -0,0 +1,3 @@
"""
Nested file in bar/
"""

View File

@ -0,0 +1,3 @@
"""
Nested file in foo/
"""

View File

@ -29,9 +29,15 @@ def configure(conf):
def build(bld):
# first compile a few pyc and pyo files (set install_path=None to disable the installation...)
# first compile a few pyc and pyo files (set install_path=None to disable the installation,
# by default install_path is set to ${PYTHONDIR})
bld(features='py', source=bld.path.ant_glob('*.py'), install_from='.')
# example for generated python files
target = bld.path.find_or_declare('abc.py')
bld(rule='touch ${TGT}', source='wscript', target=target)
bld(features='py', source=[target], install_from=target.parent)
# then a c extension module
bld(
features = 'c cshlib pyext',
@ -44,3 +50,19 @@ def build(bld):
source = 'test.c',
target = 'test')
# Install files keeping their directory structure (default: relative_trick=True)
#
# This will create:
# * lib/python2.7/site-packages/nested_scripts/foo/nested_foo.py
bld(features='py',
source=bld.path.ant_glob('nested_scripts/foo/*.py'),
install_from='.')
# Install files flatting the directory structure (relative_trick=False)
#
# This will create:
# * lib/python2.7/site-packages/nested_bar.py
bld(features='py',
source=bld.path.ant_glob('nested_scripts/bar/*.py'),
relative_trick=False,
install_from='.')

37
demos/qt5/foo.cpp Normal file
View File

@ -0,0 +1,37 @@
// Thomas Nagy, 2011-2016
#include "foo.h"
Foo::Foo() : QWidget(NULL) {
m_button = new QPushButton("Foo Button", this);
m_button->setGeometry(QRect(QPoint(50, 60),
QSize(120, 50)));
connect(m_button, SIGNAL (released()), this, SLOT (handleButton()));
myToggle = true;
}
void Foo::handleButton() {
if (myToggle) {
m_button->setText("Button Foo");
} else {
m_button->setText("Foo Button");
}
myToggle = !myToggle;
}
int Foo::FortyTwo() {
return 42;
}
class Bar_private : public QWidget {
Q_OBJECT
signals:
void test();
public:
Bar_private();
};
Bar_private::Bar_private() : QWidget(NULL) {
}
#include "foo.moc"

23
demos/qt5/foo.h Normal file
View File

@ -0,0 +1,23 @@
// Thomas Nagy, 2011-2016
#ifndef _FOO
#define _FOO
#include <QWidget>
#include <QPushButton>
class Foo : public QWidget {
Q_OBJECT
signals:
void test();
private slots:
void handleButton();
public:
Foo();
int FortyTwo();
QPushButton *m_button;
public:
bool myToggle;
};
#endif

27
demos/qt5/main.cpp Normal file
View File

@ -0,0 +1,27 @@
// Thomas Nagy, 2016 (ita)
#include <QApplication>
//#include <QString>
//#include "mainwindow.h"
#include "ui_but.h"
#include "foo.h"
int main(int argc, char **argv)
{
Q_INIT_RESOURCE(res);
QApplication app(argc, argv);
Foo window;
Ui::Form ui;
ui.setupUi(&window);
window.show();
return app.exec();
/*
MainWindow window;
if (argc == 2)
window.openFile(argv[1]);
else
window.openFile(":/files/bubbles.svg");
window.show();
return app.exec();
*/
}

7
demos/qt5/res.qrc Normal file
View File

@ -0,0 +1,7 @@
<!DOCTYPE RCC>
<RCC version="1.0">
<qresource>
<file alias="logo.svg">../../docs/slides/presentation/gfx/waflogo.svg</file>
</qresource>
</RCC>

31
demos/qt5/testqt5.cpp Normal file
View File

@ -0,0 +1,31 @@
// Example of Qt5 Unit test with QtTest library
// Federico Pellegrin, 2019 (fedepell)
#include "foo.h"
#include <QtTest/QtTest>
class TestQt5Test: public QObject {
Q_OBJECT
private:
Foo myFoo;
private slots:
void testGui();
void testFunc();
};
// Test of the UI by simulating a button click and button label reading
void TestQt5Test::testGui() {
QCOMPARE(myFoo.m_button->text(), QString("Foo Button"));
QTest::mouseClick(myFoo.m_button, Qt::LeftButton,Qt::NoModifier, QPoint(5,5), 0);
QCOMPARE(myFoo.m_button->text(), QString("Button Foo"));
}
// Test of a normal function
void TestQt5Test::testFunc() {
QCOMPARE(myFoo.FortyTwo(), 44); // this fails! 42 != 44
}
QTEST_MAIN(TestQt5Test)
#include "testqt5.moc"

88
demos/qt5/wscript Normal file
View File

@ -0,0 +1,88 @@
#! /usr/bin/env python
# encoding: utf-8
# Thomas Nagy, 2016 (ita)
# Federico Pellegrin, 2019 (fedepell)
VERSION='0.0.1'
APPNAME='qt5_test'
top = '.'
out = 'build'
def options(opt):
opt.load('compiler_cxx qt5 waf_unit_test')
def configure(conf):
conf.load('compiler_cxx qt5 waf_unit_test')
#conf.env.append_value('CXXFLAGS', ['-g']) # test
if not conf.env.QT_LRELEASE:
# While qt5 detects most Qt tools, most of them are optional
conf.fatal('lrelease was not found')
# These tests would run on Ubuntu but not on other platforms
conf.check(
define_name = 'XYZ_QT5_TESTS',
mandatory = False,
execute = True,
features = 'qt5 cxx cxxprogram',
includes = '.',
defines = 'QT_WIDGETS_LIB',
use = 'QT5CORE QT5GUI QT5WIDGETS QT5TEST',
msg = 'Checking whether Qt5 tests can run',
fragment = '''
#include <QtTest/QtTest>
class TestQt5Test: public QObject {
Q_OBJECT
private:
void testGui() {
QWidget *widget = NULL;
QTest::mouseClick(widget, Qt::LeftButton, Qt::NoModifier, QPoint(5,5), 0);
}
};
QTEST_MAIN(TestQt5Test)
#include "test.moc"
''')
def build(bld):
# According to the Qt5 documentation:
# Qt classes in foo.h -> declare foo.h as a header to be processed by moc
# add the resulting moc_foo.cpp to the source files
# Qt classes in foo.cpp -> include foo.moc at the end of foo.cpp
#
bld(
features = 'qt5 cxx cxxprogram',
use = 'QT5CORE QT5GUI QT5SVG QT5WIDGETS',
source = 'main.cpp res.qrc but.ui foo.cpp',
moc = 'foo.h',
target = 'window',
includes = '.',
lang = bld.path.ant_glob('linguist/*.ts'),
langname = 'somefile', # include the .qm files from somefile.qrc
)
if bld.env.XYZ_QT5_TESTS:
# Example of integration of Qt5 Unit tests using Qt5Test using waf_unit_test
bld(
features = 'qt5 cxx cxxprogram test',
use = 'QT5CORE QT5GUI QT5WIDGETS QT5TEST',
defines = 'QT_WIDGETS_LIB',
source = 'foo.cpp testqt5.cpp',
moc = 'foo.h',
target = 'footest',
includes = '.',
# ut_str = './${SRC} -o test-report.xml,xunitxml', # put output to a xunit xml
)
bld.add_post_fun(print_test_results) # print output of test runner to user
def print_test_results(bld):
lst = getattr(bld, 'utest_results', [])
if not lst:
return
for result in lst:
print(result.out.decode('utf-8'))
print(result.err.decode('utf-8'))

View File

@ -19,7 +19,7 @@ def build(bld):
features = 'subst', # the feature 'subst' overrides the source/target processing
source = 'foo.in', # list of string or nodes
target = 'foo.txt', # list of strings or nodes
encoding = 'ascii', # file encoding for python3, default is ISO8859-1
encoding = 'ascii', # file encoding for python3, default is latin-1
install_path = '/tmp/uff/', # installation path, optional
chmod = Utils.O755, # installation mode, optional
PREFIX = bld.env.PREFIX, # variables to use in the substitution

View File

@ -1,6 +1,6 @@
\section{Conclusions}
Hopefully, the text will create a sensible PostScript or \acronym{PDF} document. That choice is
made in the wscript file in this directory. It perhas needs making into a command line option.
Also there should be the possiblity of making both PostScript and \acronym{PDF} on the same run
made in the wscript file in this directory. It perhaps needs making into a command line option.
Also there should be the possibility of making both PostScript and \acronym{PDF} on the same run
-- at least if generating \acronym{PDF} from \acronym{DVI}.

View File

@ -10,7 +10,8 @@
\maketitle
\tableofcontents
\glossarystyle{altlist}
% next line is broken after using a newer texlive version
%\glossarystyle{altlist}
%% The glossary entries
\newglossaryentry{african}

View File

@ -17,7 +17,7 @@ def build(bld):
# optional parameters
obj.outs = 'ps' # we want a postscript output too - 'ps pdf' works too
obj.prompt = 1 # put 0 for the batchmode (conceals the debug output)
obj.prompt = 1 # put 0 for the nonstopmode (conceals the debug output)
obj.deps = 'wscript crossreferencing.ltx' # use this to give dependencies directly
# or more simply, for a pdf..

View File

@ -1,10 +1,13 @@
#! /usr/bin/env python
# encoding: utf-8
bld.env.NARG = '-flag2'
bld(
features = 'cxx cxxprogram test',
source = 'HelloWorldTest.cpp',
target = 'unit_test_program',
use = 'unittestmain useless CPPUNIT',
ut_str = '${SRC[0].abspath()} -flag1 ${NARG}',
name = 'test0',
)

View File

@ -1,17 +1,12 @@
#! /usr/bin/env python
# encoding: utf-8
def fun(task):
#print task.generator.bld.name_to_obj('somelib').link_task.outputs[0].abspath(task.env)
task.ut_exec.append('--help')
bld(
features = 'cxx cxxprogram test',
source = 'AccumulatorTest.cpp',
target = 'unit_test_program',
use = 'unittestmain useless CPPUNIT',
ut_cwd = bld.path.abspath(),
ut_fun = fun
ut_cwd = bld.path,
name = 'test1',
)

View File

@ -0,0 +1,5 @@
#!/usr/bin/env python
# encoding: utf-8
import sys
print('success')
sys.exit(0)

View File

@ -0,0 +1,12 @@
#! /usr/bin/env python
# encoding: utf-8
if bld.env['PYTHON']:
bld(
features = 'test_scripts',
test_scripts_source = 'test.py',
test_scripts_template = '${PYTHON} ${SCRIPT}',
name = 'test2',
)

View File

@ -0,0 +1,6 @@
#!/usr/bin/env python
# encoding: utf-8
import test_import
import sys
print('success from @NAME@')
sys.exit(@EXIT_STATUS@)

View File

@ -0,0 +1,3 @@
#!/usr/bin/env python
# encoding: utf-8
print('imported')

View File

@ -0,0 +1,30 @@
#! /usr/bin/env python
# encoding: utf-8
if bld.env['PYTHON']:
bld(
features = 'subst',
source = 'test.py.in',
target = 'test.1.py',
NAME = 'first test3',
EXIT_STATUS = '0',
)
bld(
features = 'subst',
source = 'test.py.in',
target = 'test.2.py',
NAME = 'second test3',
EXIT_STATUS = '0',
)
paths = {
'PYTHONPATH': bld.path.abspath()
}
bld(
features = 'test_scripts',
test_scripts_source = 'test.1.py test.2.py',
test_scripts_template = '${PYTHON} ${SCRIPT}',
test_scripts_paths = paths,
name = 'test3',
)

View File

@ -2,7 +2,7 @@
# encoding: utf-8
def build(bld):
bld.recurse('test0 test1')
bld.recurse('test0 test1 test2 test3')
obj = bld(
features = 'cxx cxxstlib',

View File

@ -16,7 +16,6 @@ out = 'build'
def options(opt):
opt.load('compiler_cxx')
opt.load('waf_unit_test')
opt.add_option('--onlytests', action='store_true', default=True, help='Exec unit tests only', dest='only_tests')
def configure(conf):
conf.load('compiler_cxx')
@ -27,6 +26,9 @@ def configure(conf):
if 'dl' not in conf.env.LIB_CPPUNIT:
l = conf.check(lib='dl', uselib_store='CPPUNIT')
# the interpreted tests need python
conf.find_program('python', mandatory=False)
from waflib import Logs
def summary(bld):
lst = getattr(bld, 'utest_results', [])
@ -38,25 +40,30 @@ def summary(bld):
Logs.pprint('CYAN', 'test report %3.0f%% success' % val)
Logs.pprint('CYAN', ' tests that fail %d/%d' % (tfail, total))
for (f, code, out, err) in lst:
if code:
Logs.pprint('CYAN', ' %s' % f)
Logs.pprint('RED', 'status: %r' % code)
if out: Logs.pprint('RED', 'out: %r' % out)
if err: Logs.pprint('RED', 'err: %r' % err)
for result in lst:
if result.exit_code:
# In ut_task we have the task running the test and we can get any extra information
# from there (in this example just the generator name)
Logs.pprint('CYAN', ' %s (%s)' % (result.test_path, result.generator.name))
Logs.pprint('RED', 'status: %r' % result.exit_code)
if result.out:
Logs.pprint('RED', 'out: %r' % result.out)
if result.err:
Logs.pprint('RED', 'err: %r' % result.err)
def build(bld):
bld.recurse('src tests')
# unittestw.summary is a pretty ugly function for displaying a report (feel free to improve!)
# waf_unit_test.summary is a pretty ugly function for displaying a report (feel free to improve!)
# results -> bld.utest_results [(filename, returncode, stdout, stderr), (..., ), ...]
#bld.add_post_fun(waf_unit_test.summary)
bld.add_post_fun(summary)
# to execute all tests:
# $ waf --alltests
# to set this behaviour permanenly:
bld.options.all_tests = True
# to set this behaviour permanently:
#bld.options.all_tests = True
bld.options.clear_failed_tests = True
# debugging zone:
# $ waf --zones=ut

View File

@ -13,9 +13,16 @@ def build(bld):
if not bld.env.build_gtk3:
return
bld (
features = 'c glib2',
use = 'GLIB GIO GOBJECT',
source = 'test.gresource.xml',
target = 'foo'
)
bld (
features = 'c cprogram glib2',
use = 'GTK3',
use = 'GTK3 foo',
packages = 'gtk+-3.0',
source = 'test.vala',
vala_resources = 'test.gresource.xml', # adds --gresources /path/to/test.gresources.xml

View File

@ -15,6 +15,7 @@ def options(opt):
opt.load('vala')
def configure(conf):
conf.env.VALA_MINVER = (0, 25, 0)
conf.load('compiler_c vala')
conf.check_cfg(package='glib-2.0', uselib_store='GLIB', atleast_version='2.10.0', mandatory=1, args='--cflags --libs')
conf.recurse('resources')

View File

@ -45,7 +45,7 @@ def build(bld):
#
# the config set 'debug' is loaded automatically when the 'debug' variant is used
if not bld.variant:
bld.fatal('Call "waf build_debug" or "waf build_release", and read the comments in the wscript file!')
bld.fatal('Call "waf build_debug" or "waf build_release" (same with "clean_debug") and read the comments in the wscript file!')
# the includes='.' add the build directory path to the command arguments
# (look at the -I flags by using waf -v)
@ -72,20 +72,20 @@ def init(ctx):
cmd = name + '_' + x
variant = x
def buildall(ctx):
import waflib.Options
for x in ('build_debug', 'build_release'):
waflib.Options.commands.insert(0, x)
## if you work on "debug" 99% of the time, here is how to re-enable "waf build":
#for y in (BuildContext, CleanContext, InstallContext, UninstallContext):
# class tmp(y):
# variant = 'debug'
# you may also set 'win32/debug' instead of 'debug' (waf 1.6.9)
# you may also set 'win32/debug' instead of 'debug'
# the commands will be "build_win32/debug" or "build_win32/release"
# in this case you may want to modify Options.commands in this "init" function
# calling "waf buildall" will run "waf build_debug build_release"
def buildall(ctx):
import waflib.Options
for x in ('build_debug', 'build_release'):
waflib.Options.commands.insert(0, x)
# --------------------------
# or, if you want to memorize the default variant and just type "waf",
#

View File

@ -1,149 +0,0 @@
#! /usr/bin/env python
# encoding: utf-8
# J. Carretero, 2010 (zougloub)
# Thomas Nagy, 2010 (ita)
"""
https://launchpad.net/subunit/
"""
import sys, os
if "uname" in dir(os): machine = os.uname()[1]
elif sys.platform == "win32": machine = os.environ["COMPUTERNAME"]
else: raise Exception("Unknown platform, cannot get machine name")
from waflib import Logs, Errors
# python 2.3 tends to hang for whatever reason :-/
PYTHONS = "2.5 2.6 2.7 3.0 3.1 3.2 3.3 3.4".split()
DIRS = ['c', 'python']
if os.environ.get('BUILDFARM', None):
DIRS = [x for x in os.listdir('.') if os.path.isdir(x) and x not in ('variants', 'build', 'mac_app', 'precious') and x.find('waf-') < 0]
def options(opt):
for d in opt.path.ant_glob(DIRS, excl=['build', 'variants'], src=False, dir=True):
if d.name[0] == '.' or d.name == 'variants' or d.name == 'build':
continue
try:
opt.recurse(d.name)
except Exception:
pass
# one sub-project uses autoconfig, but i do not want it here
from waflib import Configure
Configure.autoconfig = False
def configure(conf):
#Logs.info('Running action configure') # build farm
try:
sub = conf.find_file('subprocess.py', ['/usr/lib64/python', '/usr/lib/python', '/usr/local/lib64/python', '/usr/local/lib/python'])
except:
sub = ''
curwaf = os.path.abspath(sys.argv[0])
conf.exec_command('%s %s configure build --zip-type=gz --tools=doxygen,fluid,ocaml,swig,compiler_fc,fc_config,fc,fc_scan,g95,ifort,gfortran,batched_cc,%s --prelude='' && /bin/cp waf demos/' % (sys.executable, curwaf, sub),
cwd=conf.path.parent.abspath())
node = conf.path.find_resource('waf')
if not node:
conf.fatal('Could not find Waf')
#if conf.exec_command([node.abspath(), '--help'], shell=False, env={}, cwd=node.parent.abspath()):
# conf.fatal('the waf file cannot be executed')
conf.env.WAF = node.abspath()
conf.in_msg += 1
for d in conf.path.ant_glob(DIRS, excl=['build', 'variants', 'precious'], src=False, dir=True):
if d.name[0] == '.':
continue
conf.env.stash()
try:
conf.recurse(d.name)
except Exception:
conf.env.revert()
node = conf.path.find_node('%s/build/config.log' % d.name)
if node:
Logs.info("-- BEGIN %s config.log --\n%s-- END %s config.log --" % (d.name, node.read(), d.name))
try:
e = sys.exc_info()[1]
print(e)
print(e.stdout, e.stderr)
except Exception:
pass
else:
conf.env.revert()
conf.env.append_value('CFG', [d.name])
print("The configurations enabled are %r" % conf.env.CFG)
# now remove the cache folders and re-create them
#conf.cmd_and_log('rm -rf .waf*')
for x in PYTHONS:
try:
conf.find_program('python'+x, var=x)
# unpacking the waf directory concurrently can lead to a race condition, we'll need to take care of this (thanks, build farm!)
conf.cmd_and_log(conf.env[x] + ['./waf', '--version'], env={})
except Exception as e:
pass
else:
conf.env.append_value('PYTHONS', x)
Logs.info("executing the build for folders %r and with pythons %r" % (conf.env.CFG, conf.env.PYTHONS))
Logs.info("contents of config.log:")
Logs.info(conf.path.find_node('build/config.log').read())
def build(bld):
print('Note: call "waf installcheck" (the default build does not do anything)')
from waflib.Build import BuildContext
class abc(BuildContext):
cmd = "installcheck"
fun = "installcheck"
def installcheck(bld):
bld.jobs = 1
#if bld.cmd == 'build':
# Logs.info('Running action build') # build farm
#print('testsuite: waflib')
def waf_cmd(self):
cmd = self.env[self.generator.python] + [self.env.WAF, 'distclean', 'configure', 'build', 'clean', 'build', '-o', 'build' + self.generator.python]
cwd = self.generator.cwd
env = dict(os.environ)
env['WAFDIR'] = ''
env['WAFLOCK'] = '.lock-wscript' + self.generator.python # use a different build directory for each build
try:
bld.cmd_and_log(cmd, cwd=cwd, env=env, quiet=0, )
except Errors.WafError as e:
e = sys.exc_info()[1]
s = "testsuite: %s\ntestsuite-xfail: %s [ %s \n %s ]\n" % (self.generator.name, self.generator.name, e.stderr, e.stdout)
Logs.info(s)
else:
s = "testsuite: %s\ntestsuite-success: %s\n" % (self.generator.name, self.generator.name)
Logs.info(s)
for x in bld.env.PYTHONS:
for dirname in bld.env.CFG:
bld(rule = waf_cmd,
cwd = dirname,
always = 1,
python = x,
name = '%s_%s' % (dirname, x))
#if bld.cmd == 'build':
# Logs.info('BUILD STATUS: 0\nACTION PASSED: build') # build farm
# Logs.info('Running action test') # build farm
#Logs.info('testsuite: abc')
#def end(bld):
# Logs.info('testsuite-success: abc')
# Logs.info('TEST STATUS: 0\nACTION FAILED: test')
#bld.add_post_fun(end)
#elif bld.cmd == 'install':
# Logs.info('Running action install') # build farm
# Logs.info('INSTALL STATUS: 0\nACTION PASSED: install') # build farm

View File

@ -1,9 +0,0 @@
#include <iostream>
#include "MyLib/TestClass.h"
int main(int argc, char const *argv[])
{
TestClass a;
std::cout << a.message();
return 0;
}

View File

@ -1,71 +0,0 @@
from waflib import Task, TaskGen
top = '.'
out = 'build'
APPNAME = 'TestProject'
VERSION = '1.0'
"""
This demo will create an XCode project containing
an App bundle target, a dynamic library target,
a static library target and an executable target
"""
def configure(conf):
conf.env.FRAMEWORK_VERSION = '1.0'
conf.env.ARCHS = 'x86_64'
conf.env.MACOSX_DEPLOYMENT_TARGET = '10.9'
conf.env.SDKROOT = 'macosx10.9'
conf.load('xcode6')
def build(bld):
tg = bld.framework(
includes='include',
# Specify source files.
# Give a dictionary to group by name. Use a list to add everything in one
source_files={
'MyLibSource': bld.path.ant_glob('src/MyLib/*.cpp|*.m|*.mm'),
'Include': bld.path.ant_glob(incl=['include/MyLib/*.h', 'include'], dir=True)
},
# export_headers will put the files in the Header
# buildphase in Xcode - i.e ship them with your .framework
export_headers=bld.path.ant_glob(incl=['include/MyLib/*.h', 'include/MyLib/SupportLib'], dir=True),
target='MyLib',
install='~/Library/Frameworks'
)
bld.env.LIB_SDL2 = '/Library/Frameworks/SDL2.framework/SDL2'
tg2 = bld.app(
source_files=bld.path.ant_glob('src/*.cpp'),
includes=tg.includes,
target='MyApp',
use='MyLib',
uselib='SDL2',
cxxflags='-O3',
framework='Cocoa',
settings={"Debug": {"CONFIG_NAME": 'Debug'}}
)
bld.dylib(
source_files=bld.path.ant_glob('src/MyLib/*.cpp'),
includes=tg.includes,
target='MyDynLib',
)
bld.exe(
source_files=['src/test.cpp'],
includes=tg.includes,
target='MyExe',
use='MyDynLib'
)
bld.stlib(
source_files=bld.path.ant_glob('src/MyLib/*.cpp'),
includes=tg.includes,
target='MyStaticLib',
)

View File

@ -1,402 +0,0 @@
== Advanced build definitions
=== Custom commands
==== Context inheritance
An instance of the class _waflib.Context.Context_ is used by default for the custom commands. To provide a custom context object it is necessary to create a context subclass:
// advbuild_subclass
[source,python]
---------------
def configure(ctx):
print(type(ctx))
def foo(ctx): <1>
print(type(ctx))
def bar(ctx):
print(type(ctx))
from waflib.Context import Context
class one(Context):
cmd = 'foo' <2>
class two(Context):
cmd = 'tak' <3>
fun = 'bar'
---------------
<1> A custom command using the default context
<2> Bind a context class to the command _foo_
<3> Declare a new command named _tak_, but set it to call the script function _bar_
The execution output will be:
[source,shishell]
---------------
$ waf configure foo bar tak
Setting top to : /tmp/advbuild_subclass
Setting out to : /tmp/advbuild_subclass/build
<class 'waflib.Configure.ConfigurationContext'>
'configure' finished successfully (0.008s)
<class 'wscript.one'>
'foo' finished successfully (0.001s)
<class 'waflib.Context.Context'>
'bar' finished successfully (0.001s)
<class 'wscript.two'>
'tak' finished successfully (0.001s)
---------------
A typical application of custom context is subclassing the build context to use the configuration data loaded in *ctx.env*:
[source,python]
---------------
def configure(ctx):
ctx.env.FOO = 'some data'
def build(ctx):
print('build command')
def foo(ctx):
print(ctx.env.FOO)
from waflib.Build import BuildContext
class one(BuildContext):
cmd = 'foo'
fun = 'foo'
---------------
The output will be the following:
[source,shishell]
---------------
$ waf configure foo
Setting top to : /tmp/advbuild_confdata
Setting out to : /tmp/advbuild_confdata/build
'configure' finished successfully (0.006s)
Waf: Entering directory `/disk/comp/waf/docs/book/examples/advbuild_confdata/build'
some data
Waf: Leaving directory `/disk/comp/waf/docs/book/examples/advbuild_confdata/build'
'foo' finished successfully (0.004s)
---------------
NOTE: The build commands are using this system: _waf install_ → _waflib.Build.InstallContext_, _waf step_ → _waflib.Build.StepContext_, etc
==== Command composition
To re-use commands that have context object of different base classes, insert them in the _command stack_:
// advbuild_composition
[source,python]
---------------
def configure(ctx):
pass
def build(ctx):
pass
def cleanbuild(ctx):
from waflib import Options
Options.commands = ['clean', 'build'] + Options.commands
---------------
This technique is useful for writing testcases. By executing 'waf test', the following script will configure a project, create source files in the source directory, build a program, modify the sources, and rebuild the program. In this case, the program must be rebuilt because a header (implicit dependency) has changed.
[source,python]
---------------
def options(ctx):
ctx.load('compiler_c')
def configure(ctx):
ctx.load('compiler_c')
def setup(ctx):
n = ctx.path.make_node('main.c')
n.write('#include "foo.h"\nint main() {return 0;}\n')
global v
m = ctx.path.make_node('foo.h')
m.write('int k = %d;\n' % v)
v += 1
def build(ctx):
ctx.program(source='main.c', target='app')
def test(ctx):
global v <1>
v = 12
import Options <2>
lst = ['configure', 'setup', 'build', 'setup', 'build']
Options.commands = lst + Options.commands
---------------
<1> A global variable may be used to share data between commands deriving from different classes
<2> The test command is used to add more commands
The following output will be observed:
[source,shishell]
---------------
$ waf test
'test' finished successfully (0.000s)
Setting top to : /tmp/advbuild_testcase
Setting out to : /tmp/advbuild_testcase/build
Checking for 'gcc' (c compiler) : ok
'configure' finished successfully (0.092s)
'setup' finished successfully (0.001s)
Waf: Entering directory `/tmp/advbuild_testcase/build'
[1/2] c: main.c -> build/main.c.0.o
[2/2] cprogram: build/main.c.0.o -> build/app
Waf: Leaving directory `/tmp/advbuild_testcase/build'
'build' finished successfully (0.137s)
'setup' finished successfully (0.002s)
Waf: Entering directory `/tmp/advbuild_testcase/build'
[1/2] c: main.c -> build/main.c.0.o
[2/2] cprogram: build/main.c.0.o -> build/app
Waf: Leaving directory `/tmp/advbuild_testcase/build'
'build' finished successfully (0.125s)
---------------
==== Binding a command from a Waf tool
When the top-level wscript is read, it is converted into a python module and kept in memory. Commands may be added dynamically by injecting the desired function into that module. We will now show how to bind a simple command from a Waf tool:
// advbuild_cmdtool
[source,python]
---------------
top = '.'
out = 'build'
def options(opt):
opt.load('some_tool', tooldir='.')
def configure(conf):
pass
---------------
Waf tools are loaded once for the configuration and for the build. To ensure that the tool is always enabled, it is mandatory to load its options, even if the tool does not actually provide options. Our tool 'some_tool.py', located next to the 'wscript' file, will contain the following code:
[source,python]
---------------
from waflib import Context
def cnt(ctx): <1>
"""do something"""
print('just a test')
Context.g_module.__dict__['cnt'] = cnt <2>
---------------
<1> The function to bind must accept a `Context` object as first argument
<2> The main wscript file of the project is loaded as a python module and stored as `Context.g_module`
The execution output will be the following.
[source,shishell]
---------------
$ waf configure cnt
Setting top to : /tmp/examples/advbuild_cmdtool
Setting out to : /tmp/advbuild_cmdtool/build
'configure' finished successfully (0.006s)
just a test
'cnt' finished successfully (0.001s)
---------------
=== Custom build outputs
==== Multiple configurations
The _WAFLOCK_ environment variable is used to control the configuration lock and to point at the default build directory. Observe the results on the following project:
// advbuild_waflock
[source,python]
---------------
def configure(ctx):
pass
def build(ctx):
ctx(rule='touch ${TGT}', target='foo.txt')
---------------
We will change the _WAFLOCK_ variable in the execution:
[source,shishell]
---------------
$ export WAFLOCK=.lock-wafdebug <1>
$ waf
Waf: Entering directory `/tmp/advbuild_waflock/debug'
[1/1] foo.txt: -> debug//foo.txt <2>
Waf: Leaving directory `/tmp/advbuild_waflock/debug'
'build' finished successfully (0.012s)
$ export WAFLOCK=.lock-wafrelease
$ waf distclean configure
'distclean' finished successfully (0.001s)
'configure' finished successfully (0.176s)
$ waf
Waf: Entering directory `/tmp/advbuild_waflock/release' <3>
[1/1] foo.txt: -> release/foo.txt
Waf: Leaving directory `/tmp/advbuild_waflock/release'
'build' finished successfully (0.034s)
$ tree -a
.
|-- .lock-debug <4>
|-- .lock-release
|-- debug
| |-- .wafpickle-7
| |-- c4che
| | |-- build.config.py
| | `-- _cache.py
| |-- config.log
| `-- foo.txt
|-- release
| |-- .wafpickle-7
| |-- c4che
| | |-- build.config.py
| | `-- _cache.py
| |-- config.log
| `-- foo.txt
`-- wscript
---------------
<1> The lock file points at the configuration of the project in use and at the build directory to use
<2> The files are output in the build directory +debug+
<3> The configuration _release_ is used with a different lock file and a different build directory.
<4> The contents of the project directory contain the two lock files and the two build folders.
The lock file may also be changed from the code by changing the appropriate variable in the waf scripts:
[source,python]
---------------
from waflib import Options
Options.lockfile = '.lock-wafname'
---------------
NOTE: The output directory pointed at by the waf lock file only has effect when not given in the waf script
==== Changing the output directory
===== Variant builds
In the previous section, two different configurations were used for similar builds. We will now show how to inherit the same configuration by two different builds, and how to output the targets in different folders. Let's start with the project file:
// advbuild_variant
[source,python]
---------------
def configure(ctx):
pass
def build(ctx):
ctx(rule='touch ${TGT}', target=ctx.cmd + '.txt') <1>
from waflib.Build import BuildContext
class debug(BuildContext): <2>
cmd = 'debug'
variant = 'debug' <3>
---------------
<1> The command being called is _self.cmd_
<2> Create the _debug_ command inheriting the build context
<3> Declare a folder for targets of the _debug_ command
This project declares two different builds _build_ and _debug_. Let's examine the execution output:
[source,shishell]
---------------
waf configure build debug
Setting top to : /tmp/advbuild_variant
Setting out to : /tmp/advbuild_variant/build
'configure' finished successfully (0.007s)
Waf: Entering directory `/tmp/advbuild_variant/build'
[1/1] build.txt: -> build/build.txt
Waf: Leaving directory `/tmp/advbuild_variant/build'
'build' finished successfully (0.020s)
Waf: Entering directory `/tmp/build_variant/build/debug'
[1/1] debug.txt: -> build/debug/debug.txt <1>
Waf: Leaving directory `/tmp/advbuild_variant/build/debug'
'debug' finished successfully (0.021s)
$ tree
.
|-- build
| |-- build.txt <2>
| |-- c4che
| | |-- build.config.py
| | `-- _cache.py
| |-- config.log
| `-- debug
| `-- debug.txt <3>
`-- wscript
---------------
<1> Commands are executed from _build/variant_
<2> The default _build_ command does not have any variant
<3> The target _debug_ is under the variant directory in the build directory
===== Configuration sets for variants
The variants may require different configuration sets created during the configuration. Here is an example:
// advbuild_variant
[source,python]
---------------
def options(opt):
opt.load('compiler_c')
def configure(conf):
conf.setenv('debug') <1>
conf.load('compiler_c')
conf.env.CFLAGS = ['-g'] <2>
conf.setenv('release')
conf.load('compiler_c')
conf.env.CFLAGS = ['-O2']
def build(bld):
if not bld.variant: <3>
bld.fatal('call "waf build_debug" or "waf build_release", and try "waf --help"')
bld.program(source='main.c', target='app', includes='.') <4>
from waflib.Build import BuildContext, CleanContext, \
InstallContext, UninstallContext
for x in 'debug release'.split():
for y in (BuildContext, CleanContext, InstallContext, UninstallContext):
name = y.__name__.replace('Context','').lower()
class tmp(y): <5>
cmd = name + '_' + x
variant = x
---------------
<1> Create a new configuration set to be returned by 'conf.env', and stored in 'c4che/debug_cache.py'
<2> Modify some data in the configuration set
<3> Make sure a variant is set, this will disable the normal commands 'build', 'clean' and 'install'
<4> 'bld.env' will load the configuration set of the appropriate variant ('debug_cache.py' when in 'debug')
<5> Create new commands such as 'clean_debug' or 'install_debug' (the class name does not matter)
The execution output will be similar to the following:
[source,shishell]
---------------
$ waf clean_debug build_debug clean_release build_release
'clean_debug' finished successfully (0.005s)
Waf: Entering directory `/tmp/examples/advbuild_variant_env/build/debug'
[1/2] c: main.c -> build/debug/main.c.0.o
[2/2] cprogram: build/debug/main.c.0.o -> build/debug/app
Waf: Leaving directory `/tmp/examples/advbuild_variant_env/build/debug'
'build_debug' finished successfully (0.051s)
'clean_release' finished successfully (0.003s)
Waf: Entering directory `/tmp/examples/advbuild_variant_env/build/release'
[1/2] c: main.c -> build/release/main.c.0.o
[2/2] cprogram: build/release/main.c.0.o -> build/release/app
Waf: Leaving directory `/tmp/examples/advbuild_variant_env/build/release'
'build_release' finished successfully (0.052s)
---------------

View File

@ -1,337 +0,0 @@
== Waf architecture overview
This chapter provides describes the Waf library and the interaction between the components.
=== Modules and classes
==== Core modules
Waf consists of the following modules which constitute the core library. They are located in the directory `waflib/`. The modules located under `waflib/Tools` and `waflib/extras` are extensions which are not part of the Waf core.
.List of core modules
[options="header", cols="1,6"]
|=================
|Module | Role
|Build | Defines the build context classes (build, clean, install, uninstall), which holds the data for one build (paths, configuration data)
|Configure | Contains the configuration context class, which is used for launching configuration tests and writing the configuration settings for the build
|ConfigSet | Contains a dictionary class which supports a lightweight copy scheme and provides persistence services
|Context | Contains the base class for all waf commands (context parameters of the Waf commands)
|Errors | Exceptions used in the Waf code
|Logs | Loggging system wrapping the calls to the python logging module
|Node | Contains the file system representation class
|Options | Provides a custom command-line option processing system based on optparse
|Runner | Contains the task execution system (thread-based producer-consumer)
|Scripting | Constitutes the entry point of the Waf application, executes the user commands such as build, configuration and installation
|TaskGen | Provides the task generator system, and its extension system based on method addition
|Task | Contains the task class definitions, and factory functions for creating new task classes
|Utils | Contains support functions and classes used by other Waf modules
|=================
Not all core modules are required for using Waf as a library. The dependencies between the modules are represented on the following diagram. For example, the module 'Node' requires both modules 'Utils' and 'Errors'. Conversely, if the module 'Build' is used alone, then the modules 'Scripting' and 'Configure' can be removed safely.
image::core{PIC}["Module dependencies"{backend@docbook:,height=400:},align="center"]
==== Context classes
User commands, such as 'configure' or 'build', are represented by classes derived from 'waflib.Context.Context'. When a command does not have a class associated, the base class 'waflib.Context.Context' is used instead.
The method 'execute' is the start point for a context execution, it often calls the method 'recurse' to start reading the user scripts and execute the functions referenced by the 'fun' class attribute.
The command is associated to a context class by the class attribute 'cmd' set on the class. Context subclasses are added in 'waflib.Context.classes' by the metaclass 'store_context' and loaded through the function 'waflib.Context.create_context'. The classes defined last will replace existing commands.
As an example, the following context class will define or override the 'configure' command. When calling 'waf configure', the function 'foo' will be called from wscript files:
[source,python]
---------------
from waflib.Context import Context
class somename(Context):
cmd = 'configure'
fun = 'foo'
---------------
image::classes{PIC}["Context classes"{backend@docbook:,width=850:},align="center"]
==== Build classes
The class 'waflib.Build.BuildContext' and its subclasses such as 'waflib.Build.InstallContext' or 'waflib.Build.StepContext' have task generators created when reading the user scripts. The task generators will usually have task instances, depending on the operations performed after all task generators have been processed.
The 'ConfigSet' instances are copied from the build context to the tasks ('waflib.ConfigSet.ConfigSet.derive') to propagate values such as configuration flags. A copy-on-write is performed through most methods of that class (append_value, prepend_value, append_unique).
The 'Parallel' object encapsulates the iteration over all tasks of the build context, and delegates the execution to thread objects (producer-consumer).
The overall structure is represented on the following diagram:
image::classes_build{PIC}["Build classes"{backend@docbook:,width=1100:},align="center"]
=== Context objects
==== Context commands and recursion
The context commands are designed to be as independent as possible, and may be executed concurrently. The main application is the execution of small builds as part of configuration tests. For example, the method 'waflib.Configure.run_build' creates a private build context internally to perform the tests.
Here is an example of a build that creates and executes simple configuration contexts concurrently:
// architecture_link
[source,python]
---------------
import os
from waflib.Configure import conf, ConfigurationContext
from waflib import Task, Build, Logs
def options(ctx):
ctx.load('compiler_c')
def configure(ctx):
ctx.load('compiler_c')
def build(ctx):
ctx(rule=run_test, always=True, header_name='stdio.h') <1>
ctx(rule=run_test, always=True, header_name='unistd.h')
def run_test(self):
top = self.generator.bld.srcnode.abspath()
out = self.generator.bld.bldnode.abspath()
ctx = ConfigurationContext(top_dir=top, out_dir=out) <2>
ctx.init_dirs() <3>
ctx.in_msg = 1 <4>
ctx.msg('test') <5>
header = self.generator.header_name
logfile = self.generator.path.get_bld().abspath() + os.sep \
+ header + '.log'
ctx.logger = Logs.make_logger(logfile, header) <6>
ctx.env = self.env.derive() <7>
ctx.check(header_name=header) <8>
---------------
<1> Create task generators which will run the method 'run_test' method defined below
<2> Create a new configuration context as part of a 'Task.run' call
<3> Initialize ctx.srcnode and ctx.bldnode (build and configuration contexts only)
<4> Set the internal counter for the context methods 'msg', 'start_msg' and 'end_msg'
<5> The console output is disabled (non-zero counter value to disable nested messages)
<6> Each context may have a logger to redirect the error messages
<7> Initialize the default environment to a copy of the task one
<8> Perform a configuration check
After executing 'waf build', the project folder will contain the new log files:
[source,shishell]
---------------
$ tree
.
|-- build
| |-- c4che
| | |-- build.config.py
| | `-- _cache.py
| |-- config.log
| |-- stdio.h.log
| `-- unistd.h.log
`-- wscript
---------------
A few measures are set to ensure that the contexts can be executed concurrently:
. Context objects may use different loggers derived from the 'waflib.Logs' module.
. Each context object is associated to a private subclass of 'waflib.Node.Node' to ensure that the node objects are unique. To pickle Node objects, it is important to prevent concurrent access by using the lock object 'waflib.Node.pickle_lock'.
==== Build context and persistence
The build context holds all the information necessary for a build. To accelerate the start-up, a part of the information is stored and loaded between the runs. The persistent attributes are the following:
.Persistent attributes
[options="header", cols="1,3,3"]
|=================
|Attribute | Description | Type
|root | Node representing the root of the file system | Node
|node_deps | Implicit dependencies | dict mapping Node to signatures
|raw_deps | Implicit file dependencies which could not be resolved | dict mapping Node ids to any serializable type
|task_sigs | Signature of the tasks executed | dict mapping a Task computed uid to a hash
|=================
=== Support for c-like languages
==== Compiled tasks and link tasks
The tool _waflib.Tools.ccroot_ provides a system for creating object files and linking them into a single final file. The method _waflib.Tools.ccroot.apply_link_ is called after the method _waflib.TaskGen.process_source_ to create the link task. In pseudocode:
[source,shishell]
---------------
call the method process_source:
for each source file foo.ext:
process the file by extension
if the method create_compiled_task is used:
create a new task
set the output file name to be foo.ext.o
add the task to the list self.compiled_tasks
call the method apply_link
for each name N in self.features:
find a class named N:
if the class N derives from 'waflib.Tools.ccroot.link_task':
create a task of that class, assign it to self.link_task
set the link_task inputs from self.compiled_tasks
set the link_task output name to be env.N_PATTERN % self.target
stop
---------------
This system is used for _assembly_, _C_, _C++_, _D_ and _fortran_ by default. Note that the method _apply_link_ is supposed to be called after the method _process_source_.
We will now demonstrate how to support the following mini language:
[source,shishell]
---------------
cp: .ext -> .o
cat: *.o -> .exe
---------------
Here is the project file:
// architecture_link
[source,python]
---------------
def configure(ctx):
pass
def build(ctx):
ctx(features='mylink', source='foo.ext faa.ext', target='bingo')
from waflib.Task import Task
from waflib.TaskGen import feature, extension, after_method
from waflib.Tools import ccroot <1>
@after_method('process_source')
@feature('mylink')
def call_apply_link(self): <2>
self.apply_link()
class mylink(ccroot.link_task): <3>
run_str = 'cat ${SRC} > ${TGT}'
class ext2o(Task):
run_str = 'cp ${SRC} ${TGT}'
@extension('.ext')
def process_ext(self, node):
self.create_compiled_task('ext2o', node) <4>
---------------
<1> This import will bind the methods such as _create_compiled_task_ and _apply_link_task_
<2> An alternate definition would be calling _waflib.TaskGen.feats[`mylink'] = [`apply_link']_
<3> The link task must be a subclass of another link task class
<4> Calling the method _create_compiled_task_
The execution outputs will be the following:
// why the extra space after "setting top to"?
[source,shishell]
---------------
$ waf distclean configure build -v
'distclean' finished successfully (0.005s)
Setting top to : /tmp/architecture_link
Setting out to : /tmp/architecture_link/build
'configure' finished successfully (0.008s)
Waf: Entering directory `/tmp/architecture_link/build'
[1/3] ext2o: foo.ext -> build/foo.ext.0.o
12:50:25 runner ['cp', '../foo.ext', 'foo.ext.0.o']
[2/3] ext2o: faa.ext -> build/faa.ext.0.o
12:50:25 runner ['cp', '../faa.ext', 'faa.ext.0.o']
[3/3] mylink: build/foo.ext.0.o build/faa.ext.0.o -> build/bingo
12:50:25 runner 'cat foo.ext.0.o faa.ext.0.o > bingo'
Waf: Leaving directory `/tmp/architecture_link/build'
'build' finished successfully (0.041s)
---------------
NOTE: Task generator instances have at most one link task instance
=== Writing re-usable Waf tools
==== Adding a waf tool
===== Importing the code
The intent of the Waf tools is to promote high cohesion by moving all conceptually related methods and classes into separate files, hidden from the Waf core, and as independent from each other as possible.
Custom Waf tools can be left in the projects, added to a custom waf file through the 'waflib/extras' folder, or used through 'sys.path' changes.
The tools can import other tools directly through the 'import' keyword. The scripts however should always import the tools to the 'ctx.load' to limit the coupling. Compare for example:
[source,python]
---------------
def configure(ctx):
from waflib.extras.foo import method1
method1(ctx)
---------------
and:
[source,python]
---------------
def configure(ctx):
ctx.load('foo')
ctx.method1()
---------------
The second version should be preferred, as it makes fewer assumptions on whether 'method1' comes from the module 'foo' or not, and on where the module 'foo' is located.
===== Naming convention for C/C++/Fortran
The tools 'compiler_c', 'compiler_cxx' and 'compiler_fc' use other waf tools to detect the presense of particular compilers. They provide a particular naming convention to give a chance to new tools to register themselves automatically and save the import in user scripts. The tools having names beginning by 'c_', 'cxx_' and 'fc_' will be tested.
The registration code will be similar to the following:
[source,python]
---------------
from waflib.Tools.compiler_X import X_compiler
X_compiler['platform'].append('module_name')
---------------
where *X* represents the type of compiler ('c', 'cxx' or 'fc'), *platform* is the platform on which the detection should take place (linux, win32, etc), and *module_name* is the name of the tool to use.
==== Command methods
===== Subclassing is only for commands
As a general rule, subclasses of 'waflib.Context.Context' are created only when a new user command is necessary. This is the case for example when a command for a specific variant (output folder) is required, or to provide a new behaviour. When this happens, the class methods 'recurse', 'execute' or the class attributes 'cmd', 'fun' are usually overridden.
NOTE: If there is no new command needed, do not use subclassing.
===== Domain-specific methods are convenient for the end users
Although the Waf framework promotes the most flexible way of declaring tasks through task generators, it is often more convenient to declare domain-specific wrappers in large projects. For example, the samba project provides a function used as:
[source,python]
---------------
bld.SAMBA_SUBSYSTEM('NDR_NBT_BUF',
source = 'nbtname.c',
deps = 'talloc',
autoproto = 'nbtname.h'
)
---------------
===== How to bind new methods
New methods are commonly bound to the build context or to the configuration context by using the '@conf' decorator:
[source,python]
---------------
from waflib.Configure import conf
@conf
def enterprise_program(self, *k, **kw):
kw['features'] = 'c cprogram debug_tasks'
return self(*k, **kw)
def build(bld):
# no feature line
bld.enterprise_program(source='main.c', target='app')
---------------
The methods should always be bound in this manner or manually, as subclassing may create conflicts between tools written for different purposes.

View File

@ -1,31 +0,0 @@
%%
%% This style is derived from the docbook one.
%%
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{asciidoc}[2008/06/05 AsciiDoc DocBook Style]
%% Just use the original package and pass the options.
\RequirePackageWithOptions{docbook}
% Sidebar is a boxed minipage that can contain verbatim.
% Changed shadow box to double box.
\renewenvironment{sidebar}[1][0.95\textwidth]{
\hspace{0mm}\newline%
\noindent\begin{Sbox}\begin{minipage}{#1}%
\setlength\parskip{\medskipamount}%
}{
\end{minipage}\end{Sbox}\doublebox{\TheSbox}%
}
% For DocBook literallayout elements, see `./dblatex/dblatex-readme.txt`.
\usepackage{alltt}
\usepackage{color}
\usepackage{listings}
\definecolor{gray}{gray}{0.5}
\definecolor{plum}{rgb}{0.55078125,0.09765625,0.55859375}
\lstset{commentstyle=\color{plum}}
\lstdefinelanguage{shishell} {
morekeywords={},
sensitive=false,
morecomment=[l]{\$}
}

View File

@ -1,74 +0,0 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!--
dblatex(1) XSL user stylesheet for asciidoc(1).
See dblatex(1) -p option.
-->
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<!-- TOC links in the titles, and in blue. -->
<xsl:param name="latex.hyperparam">colorlinks,linkcolor=blue,pdfstartview=FitH</xsl:param>
<xsl:param name="doc.publisher.show">0</xsl:param>
<xsl:param name="doc.lot.show"></xsl:param>
<xsl:param name="term.breakline">1</xsl:param>
<xsl:param name="doc.collab.show">0</xsl:param>
<xsl:param name="doc.section.depth">3</xsl:param>
<xsl:param name="table.in.float">0</xsl:param>
<xsl:param name="monoseq.hyphenation">0</xsl:param>
<xsl:param name="latex.output.revhistory">0</xsl:param>
<!-- This doesn't work, don't know why, see:
http://dblatex.sourceforge.net/html/manual/apas03.html
./docbook-xsl/common.xsl
-->
<!--
<xsl:param name="doc.toc.show">
<xsl:choose>
<xsl:when test="/processing-instruction('asciidoc-toc')">
1
</xsl:when>
<xsl:otherwise>
0
</xsl:otherwise>
</xsl:choose>
</xsl:param>
<xsl:param name="doc.lot.show">
<xsl:choose>
<xsl:when test="/book">
figure,table,equation,example
</xsl:when>
</xsl:choose>
</xsl:param>
-->
<xsl:param name="doc.toc.show">1</xsl:param>
<!--
Override default literallayout template.
See `./dblatex/dblatex-readme.txt`.
-->
<xsl:template match="address|literallayout[@class!='monospaced']">
<xsl:text>\begin{alltt}</xsl:text>
<xsl:text>&#10;\normalfont{}&#10;</xsl:text>
<xsl:apply-templates/>
<xsl:text>&#10;\end{alltt}</xsl:text>
</xsl:template>
<xsl:template match="processing-instruction('asciidoc-pagebreak')">
<!-- force hard pagebreak, varies from 0(low) to 4(high) -->
<xsl:text>\pagebreak[4] </xsl:text>
<xsl:apply-templates />
<xsl:text>&#10;</xsl:text>
</xsl:template>
<xsl:template match="processing-instruction('asciidoc-br')">
<xsl:text>\newline&#10;</xsl:text>
</xsl:template>
<xsl:template match="processing-instruction('asciidoc-hr')">
<!-- draw a 444 pt line (centered) -->
<xsl:text>\begin{center}&#10; </xsl:text>
<xsl:text>\line(1,0){444}&#10; </xsl:text>
<xsl:text>\end{center}&#10; </xsl:text>
</xsl:template>
</xsl:stylesheet>

View File

@ -1,389 +0,0 @@
== Builds
We will now provide a detailed description of the build phase, which is used for processing the build targets.
=== Essential build concepts
==== Build order and dependencies
To illustrate the various concepts that are part of the build process, we are now going to use a new example.
The files +foo.txt+ and +bar.txt+ will be created by copying the file +wscript+, and the file +foobar.txt+ will be created from the concatenation of the generated files. Here is a summary: footnote:[It is actually considered a best practice to avoid copying files. When this is required, consider installing files or re-using the examples provided under the folder `demos/subst` of the source ditribution.]
[source,shishell]
---------------
cp: wscript -> foo.txt
cp: wscript -> bar.txt
cat: foo.txt, bar.txt -> foobar.txt
--------------
Each of the three lines represents a command to execute. While the _cp_ commands may be executed in any order or even in parallel, the _cat_ command may only be executed after all the others are done. The constraints on *the build order* are represented on the following http://en.wikipedia.org/wiki/Directed_acyclic_graph[Directed acyclic graph]:
image::dag_tasks{PIC}["Task representation of the same build"{backend@docbook:,width=260:},align="center"]
When the +wscript+ input file changes, the +foo.txt+ output file has to be created once again. The file +foo.txt+ is said to depend on the +wscript+ file. The *file dependencies* can be represented by a Direct acyclic graph too:
image::dag_nodes{PIC}["File dependencies on a simple build"{backend@docbook:,width=120:},align="center"]
Building a project consists in executing the commands according to a schedule which will respect these constraints. Faster build will be obtained when commands are executed in parallel (by using the build order), and when commands can be skipped (by using the dependencies).
In Waf, the commands are represented by *task objects*. The dependencies are used by the task classes, and may be file-based or abstract to enforce particular constraints.
==== Direct task declaration
We will now represent the build from the previous section by declaring the tasks directly in the build section:
// build_manual_tasks
[source,python]
---------------
def configure(ctx):
pass
from waflib.Task import Task
class cp(Task): <1>
def run(self): <2>
return self.exec_command('cp %s %s' % (
self.inputs[0].abspath(), <3>
self.outputs[0].abspath()
)
)
class cat(Task):
def run(self):
return self.exec_command('cat %s %s > %s' % (
self.inputs[0].abspath(),
self.inputs[1].abspath(),
self.outputs[0].abspath()
)
)
def build(ctx):
cp_1 = cp(env=ctx.env) <4>
cp_1.set_inputs(ctx.path.find_resource('wscript')) <5>
cp_1.set_outputs(ctx.path.find_or_declare('foo.txt'))
ctx.add_to_group(cp_1) <6>
cp_2 = cp(env=ctx.env)
cp_2.set_inputs(ctx.path.find_resource('wscript'))
cp_2.set_outputs(ctx.path.find_or_declare('bar.txt'))
ctx.add_to_group(cp_2)
cat_1 = cat(env=ctx.env)
cat_1.set_inputs(cp_1.outputs + cp_2.outputs)
cat_1.set_outputs(ctx.path.find_or_declare('foobar.txt'))
ctx.add_to_group(cat_1)
---------------
<1> Task class declaration
<2> Waf tasks have a method named *run* to generate the targets
<3> Instances of _waflib.Task.Task_ have input and output objects representing the files to use (Node objects)
<4> Create a new task instance manually
<5> Set input and output files represented as _waflib.Node.Node_ objects
<6> Add the task to the build context for execution (but do not execute them immediately)
The execution output will be the following:
[source,shishell]
---------------
$ waf clean build <1>
'clean' finished successfully (0.003s)
Waf: Entering directory `/tmp/build_manual_tasks/build'
[1/3] cp: wscript -> build/foo.txt
[2/3] cp: wscript -> build/bar.txt
[3/3] cat: build/foo.txt build/bar.txt -> build/foobar.txt
Waf: Leaving directory `/tmp/build_manual_tasks/build'
'build' finished successfully (0.047s)
$ waf build <2>
Waf: Entering directory `/tmp/build_manual_tasks/build'
Waf: Leaving directory `/tmp/build_manual_tasks/build'
'build' finished successfully (0.007s)
$ echo " " >> wscript <3>
$ waf build
Waf: Entering directory `/tmp/build_manual_tasks/build'
[1/3] cp: wscript -> build/foo.txt <4>
[2/3] cp: wscript -> build/bar.txt
[3/3] cat: build/foo.txt build/bar.txt -> build/foobar.txt
Waf: Leaving directory `/tmp/build_manual_tasks/build'
'build' finished successfully (0.043s)
---------------
<1> The tasks are not executed in the _clean_ command
<2> The build keeps track of the files that were generated to avoid generating them again
<3> Modify one of the source files
<4> Rebuild according to the dependency graph
Please remember:
. The execution order was *computed automatically*, by using the file inputs and outputs set on the task instances
. The dependencies were *computed automatically* (the files were rebuilt when necessary), by using the node objects (hashes of the file contents were stored between the builds and then compared)
. The tasks that have no order constraints are executed in parallel by default
==== Task encapsulation by task generators
Declaring the tasks directly is tedious and results in lengthy scripts. Feature-wise, the following is equivalent to the previous example:
// build_task_gen
[source,python]
---------------
def configure(ctx):
pass
def build(ctx):
ctx(rule='cp ${SRC} ${TGT}', source='wscript', target='foo.txt')
ctx(rule='cp ${SRC} ${TGT}', source='wscript', target='bar.txt')
ctx(rule='cat ${SRC} > ${TGT}', source='foo.txt bar.txt', target='foobar.txt')
---------------
The *ctx(...)* call is a shortcut to the class _waflib.TaskGen.task_gen_, instances of this class are called *task generator objects*. The task generators are lazy containers and will only create the tasks and the task classes when they are actually needed:
// build_lazy_tg
[source,python]
---------------
def configure(ctx):
pass
def build(ctx):
tg = ctx(rule='touch ${TGT}', target='foo')
print(type(tg))
print(tg.tasks)
tg.post()
print(tg.tasks)
print(type(tg.tasks[0]))
---------------
Here is the output:
[source,shishell]
---------------
waf configure build
Setting top to : /tmp/build_lazy_tg
Setting out to : /tmp/build_lazy_tg/build
'configure' finished successfully (0.204s)
Waf: Entering directory `/tmp/build_lazy_tg/build'
<class 'waflib.TaskGen.task_gen'> <1>
[] <2>
[{task: foo -> foo}] <3>
<class 'waflib.Task.foo'> <4>
[1/1] foo: -> build/foo
Waf: Leaving directory `/tmp/build_lazy_tg/build'
'build' finished successfully (0.023s)
---------------
<1> Task generator type
<2> The tasks created are stored in the list _tasks_ (0..n tasks may be added)
<3> Tasks are created after calling the method post() - it is usually called automatically internally
<4> A new task class was created dynamically for the target +foo+
==== Overview of the build phase
A high level overview of the build process is represented on the following diagram:
image::build_overview{PIC}["Overview of the build phase"{backend@docbook:,width=450:},align="center"]
NOTE: The tasks are all created before any of them is executed. New tasks may be created after the build has started, but the dependencies have to be set by using low-level apis.
=== More build options
Although any operation can be executed as part of a task, a few scenarios are typical and it makes sense to provide convenience functions for them.
==== Executing specific routines before or after the build
User functions may be bound to be executed at two key moments during the build command (callbacks):
. immediately before the build starts (bld.add_pre_fun)
. immediately after the build is completed successfully (bld.add_post_fun)
Here is how to execute a test after the build is finished:
// build_pre_post
[source,python]
---------------
top = '.'
out = 'build'
def options(ctx):
ctx.add_option('--exe', action='store_true', default=False,
help='execute the program after it is built')
def configure(ctx):
pass
def pre(ctx): <1>
print('before the build is started')
def post(ctx):
print('after the build is complete')
if ctx.cmd == 'install': <2>
if ctx.options.exe: <3>
ctx.exec_command('/sbin/ldconfig') <4>
def build(ctx):
ctx.add_pre_fun(pre) <5>
ctx.add_post_fun(post)
---------------
<1> The callbacks take the build context as unique parameter 'ctx'
<2> Access the command type
<3> Access to the command-line options
<4> A common scenario is to call ldconfig after the files are installed.
<5> Scheduling the functions for later execution. Python functions are objects too.
Upon execution, the following output will be produced:
[source,shishell]
---------------
$ waf distclean configure build install --exe
'distclean' finished successfully (0.005s)
'configure' finished successfully (0.011s)
Waf: Entering directory `/tmp/build_pre_post/build'
before the build is started <1>
Waf: Leaving directory `/tmp/build_pre_post/build'
after the build is complete <2>
'build' finished successfully (0.004s)
Waf: Entering directory `/tmp/build_pre_post/build'
before the build is started
Waf: Leaving directory `/tmp/build_pre_post/build'
after the build is complete
/sbin/ldconfig: Can't create temporary cache file /etc/ld.so.cache~: Permission denied <3>
'install' finished successfully (15.730s)
---------------
<1> output of the function bound by 'bld.add_pre_fun'
<2> output of the function bound by 'bld.add_post_fun'
<3> execution at installation time
==== Installing files
Three build context methods are provided for installing files created during or after the build:
. install_files: install several files in a folder
. install_as: install a target with a different name
. symlink_as: create a symbolic link on the platforms that support it
[source,python]
---------------
def build(bld):
bld.install_files('${PREFIX}/include', ['a1.h', 'a2.h']) <1>
bld.install_as('${PREFIX}/dir/bar.png', 'foo.png') <2>
bld.symlink_as('${PREFIX}/lib/libfoo.so.1', 'libfoo.so.1.2.3') <3>
env_foo = bld.env.derive()
env_foo.PREFIX = '/opt'
bld.install_as('${PREFIX}/dir/test.png', 'foo.png', env=env_foo) <4>
start_dir = bld.path.find_dir('src/bar')
bld.install_files('${PREFIX}/share', ['foo/a1.h'],
cwd=start_dir, relative_trick=True) <5>
bld.install_files('${PREFIX}/share', start_dir.ant_glob('**/*.png'), <6>
cwd=start_dir, relative_trick=True)
---------------
<1> Install various files in the target destination
<2> Install one file, changing its name
<3> Create a symbolic link
<4> Overridding the configuration set ('env' is optional in the three methods install_files, install_as and symlink_as)
<5> Install src/bar/foo/a1.h as seen from the current script into '$\{PREFIX}/share/foo/a1.h'
<6> Install the png files recursively, preserving the folder structure read from src/bar/
NOTE: the methods _install_files_, _install_as_ and _symlink_as_ will do something only during _waf install_ or _waf uninstall_, they have no effect in other build commands
==== Listing the task generators and forcing specific task generators
The _list_ command is used to display the task generators that are declared:
// build_list
[source,python]
---------------
top = '.'
out = 'build'
def configure(ctx):
pass
def build(ctx):
ctx(source='wscript', target='foo.txt', rule='cp ${SRC} ${TGT}')
ctx(target='bar.txt', rule='touch ${TGT}', name='bar')
---------------
By default, the name of the task generator is computed from the _target_ attribute:
[source,shishell]
---------------
$ waf configure list
'configure' finished successfully (0.005s)
foo.txt
bar
'list' finished successfully (0.008s)
---------------
The main usage of the name values is to force a partial build with the _--targets_ option. Compare the following:
[source,shishell]
---------------
$ waf clean build
'clean' finished successfully (0.003s)
Waf: Entering directory `/tmp/build_list/build'
[1/2] foo.txt: wscript -> build/foo.txt
[2/2] bar: -> build/bar.txt
Waf: Leaving directory `/tmp/build_list/build'
'build' finished successfully (0.028s)
$ waf clean build --targets=foo.txt
'clean' finished successfully (0.003s)
Waf: Entering directory `/tmp/build_list/build'
[1/1] foo.txt: wscript -> build/foo.txt
Waf: Leaving directory `/tmp/build_list/build'
'build' finished successfully (0.022s)
---------------
==== Execution step by step for debugging (the _step_ command)
The _step_ is used to execute specific tasks and to return the exit status and any error message. It is particularly useful for debugging:
[source,shishell]
---------------
waf step --files=test_shlib.c,test_staticlib.c
Waf: Entering directory `/tmp/demos/c/build'
c: shlib/test_shlib.c -> build/shlib/test_shlib.c.1.o
-> 0
cshlib: build/shlib/test_shlib.c.1.o -> build/shlib/libmy_shared_lib.so
-> 0
c: stlib/test_staticlib.c -> build/stlib/test_staticlib.c.1.o
-> 0
cstlib: build/stlib/test_staticlib.c.1.o -> build/stlib/libmy_static_lib.a
-> 0
Waf: Leaving directory `/tmp/demos/c/build'
'step' finished successfully (0.201s)
---------------
In this case the +.so+ files were also rebuilt. Since the files attribute is interpreted as a comma-separated list of regular expressions, the following will produce a different output:
[source,shishell]
---------------
$ waf step --files=test_shlib.c$
Waf: Entering directory `/tmp/demos/c/build'
c: shlib/test_shlib.c -> build/shlib/test_shlib.c.1.o
-> 0
Waf: Leaving directory `/tmp/demos/c/build'
'step' finished successfully (0.083s)
---------------
Finally, the tasks to execute may be prefixed by 'in:' or 'out:' to specify if it is a source or a target file:
[source,shishell]
---------------
$ waf step --files=out:build/shlib/test_shlib.c.1.o
Waf: Entering directory `/tmp/demos/c/build'
cc: shlib/test_shlib.c -> build/shlib/test_shlib.c.1.o
-> 0
Waf: Leaving directory `/tmp/demos/c/build'
'step' finished successfully (0.091s)
---------------
NOTE: when using _waf step_, all tasks are executed sequentially, even if some of them return a non-zero exit status

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 329 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 361 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 565 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 617 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 623 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 411 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 640 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 353 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 350 B

Some files were not shown because too many files have changed in this diff Show More