[build2] build2 0.8.0 released

Boris Kolpackov boris at codesynthesis.com
Wed Sep 12 11:44:41 UTC 2018

We have released build2 toolchain version 0.8.0. It includes a large number
of major new features, primarily in the build system and project dependency
manager, as well as substantial additions to the documentation. We have also
started ci.cppget.org, a free CI service for open source projects that use

While 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.7.0 and cannot be
upgraded to with the package manager. 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). Also a big thank you to everyone who helped test pre-
release snapshots.

Installation instructions:


Download directory:


SHA256 checksums:

8223d01a27ddf427e6833d826e631cf1e3b9f70185f7c66684e57339096afea5 *build2-install-0.8.0.sh
c593c9980118ac6dd83c2d3d29a3014e20c4c90c5963d3935d746bd91403d19e *build2-install-msvc-0.8.0.bat
00767cff8e70bca3527381058a3ce47b2ac355b605a7a1af8998dcddc4f3f714 *build2-install-mingw-0.8.0.bat

25b3dde640a7c42c24f07e8b97ac7a045ebda820428a6592f452ff0807d4440e *build2-toolchain-0.8.0.tar.xz
bc275d8f871902d54195848ba3ee96e60b42292528597e9a792692e77074af9e *build2-toolchain-0.8.0.tar.gz

4f2d0c8f2ddbfed86da8eca169b1d42b76fad435036e1c00400d1810143723f2 *build2-baseutils-0.8.0-x86_64-windows.zip
e3cfbd24322e7c07e0f7e944fc5a25cae19ad0823948f806fcd26ccfa33c2c9e *build2-baseutils-0.8.0-i686-windows.zip
fd6cc85b8487fc87ff6df8bc887c25c206b0c31b0a7dafec5987fef9a5ea1c27 *build2-mingw-0.8.0-x86_64-windows.tar.xz
88240c0d944d8f839d59d0d582ba307ff17be72d1f4c8b3a24798a5fe47fee81 *build2-mingw-0.8.0-i686-windows.tar.xz

Certificate fingerprint for cppget.org:


NEWS file entries:

build2 version 0.8.0

 * BREAKING: rename the .test extension (Testscript file) to .testscript and
   the test{} target type to testscript{}.

 * Introduction chapter in the build system manual.

   The introduction covers every aspect of the build infrastructure, including
   the underlying concepts, for the canonical executable and library projects
   as produced by bdep-new(1).

 * New 'in' build system module.

   Given test.in containing something along these lines:

   foo = $foo$

   Now we can do:

   using in

   file{test}: in{test.in}
   file{test}: foo = FOO

   The alternative variable substitution symbol can be specified with the
   in.symbol variable and lax (instead of the default strict) mode with
   in.substitution. For example:

   file{test}: in.symbol = '@'
   file{test}: in.substitution = lax

 * New 'bash' build system module that provides modularization support for bash
   scripts. See the build system manual for all the details.

 * Support for 'binless' (binary-less aka header-only) libraries.

   A header-only library (or, in the future, a module interface-only library)
   is not a different kind of library compared to static/shared libraries but
   is rather a binary-less, or binless for short, static or shared library.
   Whether a library is binless is determined dynamically and automatically
   based on the absence of source file prerequisites. See the build system
   manual for details.

 * Use thin archives for utility libraries if available.

   Thin archives are supported by GNU ar since binutils 2.19.1 and LLVM ar
   since LLVM 3.8.0.

 * Support for archive checksum generation during distribution:

   Now we can do:

   $ b dist: ... \
   config.dist.archives='tar.gz zip' \
   config.dist.checksums='sha1 sha256'

   And end up with .tar.gz.sha1, .tar.gz.sha256, .zip.sha1, and .zip.sha256
   checksum files in addition to archives.

 * Support for excluded and ad hoc prerequisites:

   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

 * C++ Modules support:

   - handle the leading 'module;' marker (p0713)
   - switch to new GCC module interface (-fmodule-mapper)
   - force reprocessing for module interface units if compiling with MSVC

 * Testscript:

   - new mv built
   - new --after <ref-file> option in touch builtin

 * New $process.run() and $process.run_regex() functions:

   $process.run(<prog>[ <args>...])

   Return trimmed stdout.

   $process.run_regex(<prog>[ <args>...], <pat> [, <fmt>])

   Return stdout lines matched and optionally processed with regex.

   Each line of stdout (including the customary trailing blank) is matched (as
   a whole) against <pat> and, if successful, returned, optionally processed
   with <fmt>, as an element of a list.

 * Support for name patterns without wildcard characters.

   In particular, this allows the "if-exists" specification of prerequisites,
   for example:

   for t: $tests
     exe{$t}: cxx{$t} test{+$t}

 * Functions for decomposing name as target/prerequisite name:


 * Add support for default extension specification, trailing dot escaping.

   For example:

   cxx{*}: extension = cxx

   cxx{foo}         # foo.cxx
   cxx{foo.test}    # foo.test      (probably what we want...)
   cxx{foo.test...} # foo.test.cxx  (... is this)
   cxx{foo..}       # foo.
   cxx{foo....}     # foo..
   cxx{foo.....}    # error (must come in escape pairs)

 * Use (native) C and C++ compilers we were built with as defaults for
   config.c and config.cxx, respectively.

 * Implement missing pieces in utility libraries support. In particular, we
   can now build static libraries out of utility libraries.

 * Built-in support for Windows module definition files (.def/def{}).

 * Project names are now sanitized when forming the config.import.<proj>
   variables. Specifically, '-', '+', and '.' are replaced with '_' to form a
   "canonical" variable name.

bdep version 0.8.0

  * New bdep-ci command for submitting package test requests to CI servers.
    See bdep-ci(1) for details.

  * New bdep-publish command for publishing packages to archive-based
    repositories. See bdep-publish(1) for details.

  * New unit-tests project type option for the bdep-new command.

    If specified (-t exe,unit-tests or -t lib,unit-tests) then generate build
    infrastructure for unit testing.

  * Ability to suppress auto-synchronization via the BDEP_SYNC environment

    If BDEP_SYNC is set, auto-synchronization will only be performed if its
    value is true or 1. So to suppress, run:

    $ BDEP_SYNC=0 b

bpkg version 0.8.0

  * New optional 'project' manifest value that specifies the project the
    package belongs to. See the package dependency manager manual for

  * Make package manifest 'url' and 'email' values optional.

  * Make default versioning epoch 1 instead of 0 (0 is now reserved for
    "foreign" packages).

  * New --manifest option for the pkg-verify command that allows extracting
    package's manifest file.

  * New --{repositories|packages}-file options for the rep-info command.

    This allows saving both manifests with a single invocation (which is the
    only way to guarantee they are consistent).

brep version 0.8.0

  * Package CI service (?ci). See the repository interface manual for details.

  * Package submission service (?submit). See the repository interface manual
    for details.

  * Multi-tenancy support.

  * Support for customizing repository root view.

More information about the users mailing list