Age | Commit message (Collapse) | Author | Files | Lines |
|
This is a temporary measure (until we unboundle this module) needed for
in-process configure support in bpkg.
|
|
|
|
In particular, we now always print error message on non-0 exit except
in cases where such exit is ignored.
|
|
|
|
In particular, the match() rename makes sure it doesn't clash with
rule::match() which, after removal of the hint argument in simple_rule,
has exactly the same signature, thus making it error-prone to calling
recursively.
|
|
A rule hint is a target attribute, for example:
[rule_hint=cxx] exe{hello}: c{hello}
Rule hints can be used to resolve ambiguity when multiple rules match the same
target as well as to override an unambiguous match.
|
|
|
|
|
|
Specifically, now config.<tool> (like config.cli) is handled by the import
machinery (it is like a shorter alias for config.import.<tool>.<tool>.exe
that we already had). And the cli module now uses that instead of custom
logic.
This also adds support for uniform tool metadata extraction that is handled by
the import machinery. As a result, a tool that follows the "build2 way" can be
imported with metadata by the buildfile and/or corresponding module without
any tool-specific code or brittleness associated with parsing --version or
similar outputs. See the cli tool/module for details.
Finally, two new flavors of the import directive are now supported: import!
triggers immediate importation skipping any rule-specific logic while import?
is optional import (analogous to using?). Note that optional import is always
immediate. There is also the import-specific metadata attribute which can be
specified for these two import flavors in order to trigger metadata
importation. For example:
import? [metadata] cli = cli%exe{cli}
if ($cli != [null])
info "cli version $($cli:cli.version)"
|
|
|
|
In particular, this removes the requirement to build from the Visual Studio
command prompt. Note that since MSVC compiler binaries are target-specific
(i.e., there are no -m32/-m64 options nor something like /MACHINE), in this
case we default to a 64-bit build (a 32-bit build can still be achieved by
running from a suitable command prompt).
Finally, this mechanism is also used to find Clang bundled with MSVC.
|
|
All non-const global state is now in class context and we can now have
multiple independent builds going on at the same time.
|
|
|
|
|
|
|
|
By default the checks are enabled only for the staged toolchain.
|
|
|
|
|
|
|
|
The inclusion/exclusion is controlled via the 'include' prerequisite-specific
variable. Valid values are:
false - exclude
true - include
adhoc - include but treat as an ad hoc input
For example:
lib{foo}: cxx{win32-utility}: include = ($cxx.targe.class == 'windows')
exe{bar}: libs{plugin}: include = adhoc
|
|
|
|
While update still uses the old "all update rules update all their
prerequisites" assumption, test and install have been fixed not to
rely on this.
|
|
Instead we now have two more or less separate match states for outer and
inner parts of an action.
|
|
|
|
|
|
|
|
Also implement the build system version check.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
This is in preparation for locking its modification/access.
|
|
|
|
|
|
Turns out this was semantically the right way to do it.
|
|
We don't share them often and those that are shared (e.g., cxx{} in
obja/objs{}) are lightweight (SOO).
|
|
|
|
This makes sure, for example, that we don't unnecessarily re-link an
executable when its testscript prerequisite is changes.
|
|
|
|
|
|
The new config.import.* variable format is:
config.import.<proj>.<name>[.<type>]
For example:
b config.import.build2.b=/opt/build2/bin/b
b config.import.build2.b.exe=b-boot
|
|
|
|
|
|
This makes sure that a directory with only dir{} target gets cleaned up.
|
|
|
|
This is necessary to get rid of bogus restarts in inject_prerequisites()
where it think a group member was updated since its state changed from
unknown to (group's) changed.
|
|
We no longer enter paths from the src tree into scope map. Instead, targets
from the src tree now include their out tree directory (in essence their
"configuration"). This is then used to find a target's scope. See the
comment in class target for details.
The result of this change is that we can now again build multiple
configurations (out trees) for same project at once.
|