[build2-announce] build2 toolchain 0.6.0 released
Boris Kolpackov
boris at codesynthesis.com
Tue Aug 8 09:58:01 UTC 2017
Hi,
We have released build2 toolchain 0.6.0. It includes a large number of
major new features primarily in the build system. Note also that this is
still an alpha release with interfaces subject to change. It has been
tested on Windows, Linux, Mac OS, and FreeBSD with GCC, Clang (both
vanilla and Apple's), MinGW GCC, and MSVC (both 14 and 15).
The corresponding NEWS file entries are included below. A more detailed
discussion of the major new features is available in the release notes:
https://build2.org/release/0.6.0.xhtml
Note that this release is backwards-incompatible with 0.5.0 and cannot be
upgraded to with the package manager.
Download and build instructions:
https://build2.org/download.xhtml
Download directory:
https://download.build2.org/0.6.0/
SHA256 checksums:
ba75d4a61a584550faf09d456a563a45ccb9a27ad4b7ab9d3581a8a5f50eb55e *build2-baseutils-0.6.0-i686-windows.zip
d8885c1d3b8bd801dc3820be413b20ce9f3f15153a40b4a000d03088c49e845c *build2-baseutils-0.6.0-x86_64-windows.zip
597a8af27e3f80b0fbdaade6295e8837debafb6af4fdf98ae89949b5451ca25b *build2-mingw-0.6.0-i686-windows.tar.xz
39867c7b66602f1da52397f09fa754c185a97c39be554c4303f0f47bfbfaa4cb *build2-mingw-0.6.0-x86_64-windows.tar.xz
c4129dbb068aad16f78e9364359190a4145eaf4ed8b34e652988981ec7beb741 *build2-toolchain-0.6.0.tar.gz
47fd30bc7f6265740a988504b676cf0d75068616cae071ba5b165a38d7cd7bed *build2-toolchain-0.6.0.tar.xz
NEWS file entries:
build2 version 0.6.0
* C++ Modules TS support for GCC, Clang, and VC.
The new 'experimental' value of the cxx.std variable enables modules
support if provided by the C++ compiler. The cxx.features.modules boolean
variable can be used to control/query C++ modules enablement.
See the "C++ Module Support" section in the build system manual for all
the details.
* Precise change detection for C and C++ sources.
The build system now calculates a checksum of the preprocessed token
stream and avoids recompilation if the changes are ignorable (whitespaces,
comments, unused macros, etc). To minimize confusion ("I've changed my
code but nothing got updated"), the build system prints a 'skip' line for
ignored changes.
* Initial support for utility libraries.
A utility library is an archive that "mimics" the object file type
(executable, static library, or shared library) of its "primary" target.
Unless explicitly overridden, utility libraries are linked in the "whole
archive" mode. For example:
exe{prog}: cxx{prog} libu{prog}
libu{prog}: cxx{* -prog} libu{prog}
# Unit tests.
#
tests/
{
libu{*}: bin.whole = false # Don't link whole.
exe{test1}: cxx{test1} ../libu{prog}
exe{test2}: cxx{test2} ../libu{prog}
}
This change adds the new target group libu{} and its libue{}, libua{}, and
libus{} members. Note that the bin.whole variable can also be used on
normal static libraries.
* Progress display.
The build system will now display build progress for low verbosity levels
and if printing to a terminal. It can also be explicitly requested with
the -p|--progress option and suppressed with --no-progress.
Note that it is safe to enable progress even when redirecting to a file,
for example:
b -p 2>&1 | tee build.log
* Support for generating pkg-config's .pc files on install.
These files are now generated by default and automatically for libraries
being installed provided the version, project.summary, and project.url
variables are defined. The version module has been improved to extract the
summary and url in addition to the version from the manifest.
* Support for the '20' cxx.std value (C++20/c++2a).
* The fail, warn, info, and text directives in addition to print. For
example:
if ($cxx.id.type == 'msvc')
fail 'msvc is not supported'
* New build system functions:
- $getenv() -- query environment variable value
- $filesystem.path_{search,match}() -- wildcard pattern search/match
- $regex.{match,search,replace}() -- regex match/search/replace
* New Testscript builtins:
- ln
- exit (pseudo-builtin)
* Separate C and C++ (partial) preprocessing and compilation for Clang, GCC,
and VC.
This is part of the infrastructure that is relied upon by the C++ modules
support, precise change detection support, and, in the future, by
distributed compilation.
There is also the ability to limit the amount of preprocessing done on a
source file by setting the {c,cxx}.preprocessed variables. Valid values
are 'none' (not preprocessed), 'includes' (no #include directives in the
source), 'modules' (as above plus no module declarations depend on the
preprocessor, for example, #ifdef, etc.), and 'all' (the source is fully
preprocessed). Note that for 'all' the source may still contain comments
and line continuations.
While normally unnecessary, the use of the (partially) preprocessed output
in compilation can be disabled. This can be done from a buildfile for a
scope (including project root scope) and per target via the cc.reprocess
variable:
cc.reprocess = true
obj{hello}: cc.reprocess = false
As well as externally via the config.cc.reprocess variable:
b config.cc.reprocess=true
bpkg version 0.6.0
* Add doc-url and src-url manifest values.
* Support for repository certificate wildcards.
A wildcard in the *.example.com form matches any single-level subdomain
while **.example.com -- any subdomains. See the bpkg-repository-signing(1)
help topic for details.
brep version 0.6.0
* Support for displaying package builds both on individual package pages
as well as overall for all packages.
* Support for bbot agent authentication.
* Support for build-include and build-exclude package manifest values.
* Support for specifying custom warning detection regular expressions.
* Support for displaying doc-url and src-url package manifest values.
Enjoy,
Boris
More information about the announce
mailing list