build2 | 0.10.0 Release Notes

These notes provide a more detailed discussion of major new features, including the motivation for implementing them and their usage examples. For the complete list of changes, refer to the Release Announcement or the NEWS files in the individual packages. See also the discussion of these release notes on r/cpp/.

Coming shortly after 0.9.0, this is more of a maintenance release that nevertheless includes a good number of new features. It was also an opportunity to hone our release process with the overall goal of increasing the release cadence.

The CI service now includes a number of upgraded and new build machines. Specifically, GCC 8.2.0 was upgraded to 8.3.0, Clang 7.0.0 to 7.0.1, and there is now FreeBSD 12.0 with Clang 7.0.1. We've also added the new experimental build class that includes two new build machines: one with a snapshot of GCC 9 and one with MSVC 16 RC1. Overall, the CI service now has 33 build configurations; see the Build Configurations page for the complete list.

Build System

One of the more notable new features in the build system is support for an alternative build file/directory naming scheme. Now the build/*.build and buildfile filesystem entries in a project can alternatively (but consistently) be called build2/*.build2 and build2file.

The alternative naming scheme is primarily useful when adding build2 support to an existing project along with other build systems. In this case, the fairly generic standard names might already be in use. For example, it is customary to have build/ in .gitignore. Plus more specific naming will make it easier to identify files and directories as belonging to the build2 support. For new projects as well as for existing projects that are switching exclusively to build2 the standard naming scheme is still recommended.

To create a project with the alternative naming using bdep-new(1) pass the alt-naming project type sub-option. For example:

$ bdep new -t exe,alt-naming -l c++ hello

Another interesting build system improvement is support for multiple variable overrides. Now we can do:

$ b config.cxx.coptions=-O3 config.cxx.coptions=-O0

Or even:

$ b config.cxx.coptions=-O3 config.cxx.coptions+=-g

On the Windows front we now have support for MSVC 16 (2019) as well as automatic switching to option files (AKA response files) if the linker command line is too long. The latter covers both MSVC link.exe/lib.exe and MinGW gcc.exe/ar.exe.

Project Dependency Manager

The project dependency manager's bdep-new(1) command now supports the --subdirectory mode that can be used to create a new source subdirectory, normally an executable or a library, in an already existing project. For example:

$ bdep new -t bare hello
$ cd hello

$ bdep new --subdirectory -t lib -l c++ libhello
$ bdep new --subdirectory -t lib -l c++ libextra
$ bdep new --subdirectory -t exe -l c++ hello

Another improvement to the new command is support for more granular C++ source file extension specification. For example:

$ bdep new -t lib -l c++,hxx=h,cxx=cpp libhello  # .h & .cpp
$ bdep new -t lib -l c++,extension=?++ libhello  # .h++, .c++, etc

See the bdep-new(1) man pages for details.