[build2] build2 0.9.0 released

Boris Kolpackov boris at codesynthesis.com
Thu Feb 21 11:21:21 UTC 2019

We have released build2 toolchain version 0.9.0. The main focus of this
release was "quality of life" improvements. It includes a large number
of bug fixes, tweaks to existing features, as well as new features that
should all make for a smoother, more pleasant development experience.

While the corresponding NEWS file entries are included below, a more
detailed discussion of the major new features is available in the
release notes:


With this release we are also starting to support automated upgrades via
the package manager of the build2 toolchain itself. While you could do
this manually, the install scripts now provide the --upgrade option for
the fully automated process.

This release 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). A big thank you to everyone who helped test pre-release snapshots.

Installation instructions:


Download directory:


SHA256 checksums:

8b64b57948aa974e9c911e10559c511ad26bbda5c79947a4bd0f812d962a6787 *build2-install-0.9.0.sh
79ea1f5c4b32e44cf3a8541cf3715b5557e018740aed4aed58deb545e714d6f3 *build2-install-msvc-0.9.0.bat
671b327589c95698e2385fe0efa7cd29a91d474774b70ef0801bc43e8c43be1f *build2-install-mingw-0.9.0.bat

f73cfe5ba5f07dd6b16b822c942e95e465af1ac77f983163b2550483cec0bb7b *build2-toolchain-0.9.0.tar.xz
9e8905cd0b767bc813a5d1fe798d1bcf81cc5bce808f458046d410a57fbea203 *build2-toolchain-0.9.0.tar.gz

593a6f973a12746380234ef3eaf41567e3271a691b5c51149a690b932063c666 *build2-baseutils-0.9.0-x86_64-windows.zip
f17e990e1999af847d26466c82c81ae0e3c06b5943f65af9e0e1b8110f293e2e *build2-baseutils-0.9.0-i686-windows.zip

5a6dd0450b9635c960a94be917ea3f9e50b4f26066f8101b34f32ea71bbb55dd *build2-mingw-0.9.0-x86_64-windows.tar.xz
5b353977765c7d411e2311c50e456dfa4af6563891f47d707efec69e87ad2be1 *build2-mingw-0.9.0-i686-windows.tar.xz

Certificate fingerprint for cppget.org:


NEWS file entries:

build2 version 0.9.0

 * New "Diagnostics and Debugging" section in the manual on debugging build

 * Support for dependency chains.

   Now instead of:

   ./: exe{foo}
   exe{foo}: cxx{*}

   We can write:

   ./: exe{foo}: cxx{*}

   Or even:

   ./: exe{foo}: libue{foo}: cxx{*}

   This can be combined with prerequisite-specific variables (which naturally
   only apply to the last set of prerequisites in the chain):

   ./: exe{foo}: libue{foo}: bin.whole = false

 * Support for target and prerequisite specific variable blocks.

   For example, now instead of:

   lib{foo}: cxx.loptions += -static
   lib{foo}: cxx.libs += -lpthread

   We can write:

     cxx.loptions += -static
     cxx.libs += -lpthread

   The same works for prerequisites as well as target type/patterns. For

     test = true
     install = false

 * Fallback to loading outer buildfile if there isn't one in the target's
   directory (src_base).

   This covers the case where the target is defined in the outer buildfile
   which is common with non-intrusive project conversions where everything is
   built from a single root buildfile.

 * Command line variable override scope syntax is now consistent with
   buildfile syntax.


   $ b dir/:foo=bar ...


   $ b dir/foo=bar

   Alternatively (the buildfile syntax):

   $ b 'dir/ foo=bar'

   Note that the (rarely used) scope visibility modifier now leads to a double

   $ b dir//foo=bar

 * Support for relative to base scope command line variable overrides.

   Currently, if we do:

   $ b dir/ ./foo=bar

   The scope the foo=bar is set on is relative to CWD, not dir/. While this
   may seem wrong at first, this is the least surprising behavior when we take
   into account that there can be multiple dir/'s.

   Sometimes, however, we do want the override directory to be treated
   relative to (every) target's base scope that we are building. To support
   this we are extending the '.' and '..' special directory names (which are
   still resolved relative to CWD) with '...', which means "relative to the
   base scope of every target in the buildspec". For example:

   $ b dir/ .../foo=bar

   Is equivalent to:

   $ b dir/ dir/foo=bar


   $ b liba/ libb/ .../tests/foo=bar

   Is equivalent to:

   $ b liba/ libb/ liba/tests/foo=bar libb/tests/foo=bar

 * New config.{c,cxx}.{id,version,target} configuration variables.

   These variables allow overriding guessed compiler id/version/target, for
   example, in case of mis-guesses or when working with compilers that don't
   report their base (e.g., GCC, Clang) with -v/--version (common in the
   embedded space).

 * New --[no-]mtime-check options to control backwards modification time
   checks at runtime.

   By default the checks are enabled only for the staged toolchain.

 * New --dump <phase> option, remove state dumping from verbosity level 6.

 * The info meta-operation now prints the list of operations and meta-
   operations supported by the project.

 * New sleep Testscript builtin.

bdep version 0.9.0

  * New bdep-release command for managing a project's version during release.

    This command can be used to automatically change the project's version
    from snapshot to release (or the other way around), commit this change,
    tag this commit, and push everything to the remote.

    See the "Versioning and Release Management" in The build2 Toolchain
    Introduction for usage examples as well as the bdep-release(1) man pages
    for details.

  * New 'binless' option for the bdep-new 'c++' language parameter.

    This option allows creation of a simpler buildfile for header-only (and,
    in the future, for module-only) libraries. For example:

    $ bdep new -l c++,binless ...

  * New --jobs|-j option for specifying the number of jobs to perform in

  * CI requests from the staged toolchain are now by default sent to

  * New --no-progress option for suppressing progress indicators.

bpkg version 0.9.0

  * Support for the ssh:// protocol in the git repository URLs.

  * The repository type can now be specified in the repository URL's scheme
    component. For example:

    $ bpkg build git+https://example.org/project

  * New 'builds' package manifest value for specifying the build configuration
    classes the package should or should not be built for. For example:

    builds: -windows

    Note also that the 'build-include' and 'build-exclude' pattern matching
    semantics has been adjusted to distinguish between single-component ('*')
    and multi-component ('**') matches. See the manual for details.

  * Support for the '$' dependent package's version special value in the
    package manifest dependency constraints.

    This mechanism is primarily useful when developing related packages that
    should track each other's versions exactly or closely. For example:

    name: sqlite3
    version: 3.18.2
    depends: libsqlite3 == $

    See the 'depends' package manifest value in the manual for details.

  * Support for passing configuration variables in the bpkg-pkg-build command.

  * New 'build-warning-email' and 'build-error-email' package manifest values
    for specifying alternative emails for different diagnostics levels. See
    the manual for details.

  * New --jobs|-j option for specifying the number of jobs to perform in

  * New --no-progress option for suppressing progress indicators.

  * New --deep option for the bpkg-pkg-verify command. See the command's man
    pages for details.

  * Values to the --openssl* options can now be qualified with the command
    they should apply to.

brep version 0.9.0

  * Support for build configuration classes.

    See the 'builds' package manifest value documentation for details.

  * Support for "packages" and "builds" global views in the multi-tenant mode.

  * Display the package description as a pre-formatted text rather than trying
    to be clever about it.

More information about the users mailing list