[build2] build2 toolchain 0.6.0 released

Boris Kolpackov boris at codesynthesis.com
Tue Aug 8 09:57:05 UTC 2017


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:


Note that this release is backwards-incompatible with 0.5.0 and cannot be
upgraded to with the package manager.

Download and build instructions:


Download directory:


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.
      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

    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

    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.

More information about the users mailing list