[build2] build2 0.11.0 released
Boris Kolpackov
boris at codesynthesis.com
Tue Jun 11 08:42:11 UTC 2019
We have released build2 toolchain version 0.11.0. This release contains a
large number of new features across all the tools (build system, dependency
managers, etc). It also includes experimental support for C++ modules header
unit importation and include translation.
A note on backwards compatibility: in this release we have extended the
numeric representation of the standard versioning scheme. As a result,
this release cannot be upgraded to from 0.10.0 and has to be installed
from scratch. Additionally, while existing libraries created with bdep-new
will continue to work, the comment that describes the versioning scheme in
version.hxx.in (or equivalent) will no longer be accurate. The easiest way
to fix this is to run bdep-new on the side to create an identically-named
project and copy the new version.hxx.in over.
The corresponding NEWS file entries are included below with a more detailed
discussion of the major new features available in the release notes:
https://build2.org/release/0.11.0.xhtml
This release has been tested on Windows, Linux, Mac OS, and FreeBSD with
GCC, Clang (both vanilla and Apple's), MinGW GCC, and MSVC (14, 15, and
16). A big thank you to everyone who helped test staged snapshots.
The following new build configurations have been added to the CI service:
linux_debian_9-gcc_9.1
linux_debian_9-clang_8.0
macos_10.14-clang_10.0
macos_10.14-gcc_9.1_homebrew
windows_10-msvc_16.1
For the complete list of available build configurations see:
https://ci.cppget.org/?build-configs
Installation instructions:
https://build2.org/install.xhtml
Download directory:
https://download.build2.org/0.11.0/
SHA256 checksums:
37396ed937f94cf02d51c6b9f21c8cc0f95384a6325059eb24a5eba0affcd504 *build2-install-0.11.0.sh
3aa16ba0aae052ec59c622a29db9fb4834ac9bda188094ace6e193ce6aff91cb *build2-install-msvc-0.11.0.bat
213a829f12917a6febee42740f7804f1fc687f374b983e640afd75c479b11c37 *build2-install-mingw-0.11.0.bat
653bb75f31ca05760eba62bb6727d11a9f0d8ce4aa2fc1fb996d7ef6e76a4938 *build2-toolchain-0.11.0.tar.xz
c0232481826d9881bed1d29b4a75e56cb8ce12b3c37b2b34b24e0a59a1d1b271 *build2-toolchain-0.11.0.tar.gz
2353dae2b39706a4a80dbf2e5e28c99355b753f3986256c1c9a7e99485d1a70b *build2-baseutils-0.11.0-x86_64-windows.zip
65e3becc2edf7989d78569a72d030a88467fc5fb9c7b262d0d1f4575479c040c *build2-mingw-0.11.0-x86_64-windows.tar.xz
Repository certificate fingerprint for cppget.org:
86:BA:D4:DE:2C:87:1A:EE:38:C7:F1:64:7F:65:77:02:15:79:F3:C4:83:C0:AB:5A:EA:F4:F7:8C:1D:63:30:C6
NEWS file entries:
build2 version 0.11.0
* Initial work on header unit importation and include translation support.
In particular, for GCC, the (experimental) module mapper approach is now
used to handle header unit importation, include translation, and headers
dependency extraction, all with support for auto-generated headers.
* Generalized target/prerequisite variable blocks.
Target/prerequisite-specific variable blocks can now be present even if
there are prerequisites. For example, now instead of:
exe{foo}: cxx{foo}
exe{foo}: cc.loptions += -rdynamic
Or:
exe{foo}: cxx{foo}
exe{foo}:
{
cc.loptions += -rdynamic
cc.libs += -ldl
}
We can write:
exe{foo}: cxx{foo}
{
cc.loptions += -rdynamic
cc.libs += -ldl
}
This also works with dependency chains in which case the block applies to
the set of prerequisites (note: not targets) before the last ':'. For
example:
./: exe{foo}: libue{foo}: cxx{foo}
{
bin.whole = false # Applies to the libue{foo} prerequisite.
}
* Support for ad hoc target groups.
In certain cases we may need to instruct the underlying tool (compiler,
linker, etc) to produce additional outputs. For example, we may want to
request the compiler to produce an assembler listing or the linker to
produce a map file. While we could already pass the required options, the
resulting files will not be part of the build state. Specifically, they
will not be cleaned up and we cannot use them as prerequisites of other
targets.
Ad hoc target groups allow us to specify that updating a target produces
additional outputs, called ad hoc group members. For example:
<exe{hello} file{hello.map}>: cxx{hello}
{
cc.loptions += "-Wl,-Map=$out_base/hello.map"
}
<obje{hello} file{hello.lst}>:
{
cc.coptions += "-Wa,-amhls=$out_base/hello.lst"
}
Note also that all things ad hoc (prerequisites, targets, rules) are still
under active development so further improvements (such as not having to
repeat names twice) are likely.
* New config.{c,cxx}.std configuration variables that, if present, override
{c,cxx}.std specified at the project level.
In particular, this allows forcing a specific standard for all the projects
in a build configuration, for example:
$ b create: exp-conf/,cc config.cxx=g++ config.cxx.std=experimental
* New --dry-run|-n option instructs build rules to print commands without
actually executing them.
Note that commands that are required to create an accurate build state
will still be executed and the extracted auxiliary dependency information
saved. In other words, this is not the "don't touch the filesystem" mode
but rather "do minimum amount of work to show what needs to be done". In
particular, this mode is useful to quickly generate the compilation
database, for example:
$ b -vn clean update |& compiledb
* Ability to disable automatic rpath, support for custom rpath-link.
Specifically, the new config.bin.rpath.auto variable can be used to
disable the automatic addition of prerequisite library rpaths, for
example:
$ b config.bin.rpath.auto=false
Note that in this case rpath-link is still added where normally required
and for target platforms that support it (Linux and *BSD).
The new config.bin.rpath_link and config.bin.rpath_link.auto have the same
semantics as config.bin.rpath* but for rpath-link.
* Enable MSVC strict mode (/permissive-) for 'experimental' standard
starting from version 15.5.
bdep version 0.11.0
* The bdep-new command now by default adds a README.md template. This can be
suppressed with the new no-readme project type sub-option. For example:
$ bdep new -t exe,no-readme hello
* New license=<name> bdep-new project type sub-option allows specifying a
project license. For example:
$ bdep new -t exe,license=MIT hello
Commonly used license names are 'MIT', 'ASLv2' (Apache License 2.0),
'GPLv3', and 'proprietary' (see the 'license' package manifest value
documentation for a more extensive list of names). Note that if the
license is not specified, the default is now 'proprietary' instead of
'TODO'.
* New bdep-new --post-hook option allows the execution of customization
commands in the newly created project. For example:
$ bdep new --post-hook "echo .idea/ >>.gitignore" hello
See the bdep-new(1) man pages for details.
* The bdep-ci command now allows overriding certain manifest values in
packages being submitted for testing. This is primarily useful for
specifying alternative build configurations and/or build notification
emails. For example:
$ bdep ci --builds gcc
See the bdep-ci(1) man pages for details.
* New bdep-release --amend and --squash options allow releasing a revision
by squashing and amending one or more existing commits.
* New --existing|-e option for bdep-{init,new} --config-create|-C and
bdep-config create modes. With this option bdep initializes a bpkg
configuration based on an existing build system configuration instead of
creating a new one from scratch. For example:
$ b create: build-clang/,cc config.cxx=clang++
$ bdep new -C build-clang --existing hello
bpkg version 0.11.0
* The 'tags' package manifest value has been deprecated and replaced with
'keywords' (list of space-separated words) and 'topics' (list of comma-
separated, potentially multi-word concepts). For example:
topics: xml parser, xml serializer
keywords: sax dom
* New 'description-type' package manifest value allows specifying the
content type of the 'description' or 'description-file' value. Currently,
recognized values are:
text/plain
text/markdown
text/markdown;variant=GFM
text/markdown;variant=CommonMark
* New 'upstream-version' package manifest value allows preserving the
original version for information.
* The pkg-build command can now "build" a system package that doesn't have a
stub provided its version is specified explicitly. For example:
$ bpkg build ... ?sys:libsqlite3/* ?sys:libcurl/7.47.0
* New cfg-create --existing|-e option allows initializing a bpkg
configuration based on an existing build system configuration instead of
creating a new one from scratch. For example:
$ b create: build-clang/,cc config.cxx=clang++
$ bpkg create -d build-clang --existing
* New rep-info --deep option triggers the replacement of '*-file' package
manifest values with the contents of the referenced files.
brep version 0.11.0
* Support for displaying Markdown package descriptions.
* Support for displaying new package manifest values: 'upstream-version',
'topics', and 'keywords.
* Various page style cleanups and improvements.
More information about the users
mailing list