[build2-announce] build2 toolchain 0.7.0 released

Boris Kolpackov boris at codesynthesis.com
Wed May 30 11:13:59 UTC 2018


We have released build2 toolchain 0.7.0. It includes a new tool (bdep, the
project dependency manager), new documentation (rewritten introduction), as
well as a large number of major new features in the build system and package
manager (the corresponding NEWS file entries are included below).

Additionally, the project repositories are now mirrored on github.com/build2
and fully automated installation scripts are available for all major platforms
and compilers.

Note that this is still an alpha release with interfaces subject to change. It
is also backwards-incompatible with 0.6.0 and cannot be upgraded to with the
package manager. 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). And a big thank you to everyone who helped to test pre-release

Installation instructions:


Download directory:


SHA256 checksums:

36478aab7fb8636a8588bb0518b70770476b1cd3ce644ab2c72af07d9f72fa6c *build2-install-0.7.0.sh
00a2835da9bcfcce4da8f8e891e19d72746503d896490ffdddfcac800c6d4cbc *build2-install-msvc-0.7.0.bat
9fe59d7f3d74159823cde67056186699cfa7f9d3af2a548a6b1e36d975492b77 *build2-install-mingw-0.7.0.bat

9db5f770dee5821af789f2c3f9ea3cf0a2d281c397911b4ed640f2e6b1c0d543 *build2-toolchain-0.7.0.tar.xz
67ef46f42c277edd15468a68ab71024f7db16db0781468aa8080def5d2ad72b2 *build2-toolchain-0.7.0.tar.gz

ad00321c02123baae4e1504c23ea5cefb97a1f06286fe8ef1fe2c5ebdaabe6b1 *build2-baseutils-0.7.0-x86_64-windows.zip
5fc29bf8af716f45761ec35f0825d28ee1624a3ece2619f5bd880e1d36f79958 *build2-baseutils-0.7.0-i686-windows.zip
aad3eea862a99954c4b4311a2a49094764db083e50df9223257a84d26808f067 *build2-mingw-0.7.0-x86_64-windows.tar.xz
cea64264b2eec6cd23bfa3726bf61c2a9fd91dd9af5fa6a903681464e984c1fa *build2-mingw-0.7.0-i686-windows.tar.xz

Certificate fingerprint for cppget.org:


NEWS file entries:

build2 version 0.7.0

 * C++ Modules TS introduction, build system support, and design guidelines

 * Initial support for Clang targeting MSVC runtime (native Clang interface,
   not the clang-cl wrapper).

 * New {c,cxx}.guess modules.

   These can be loaded before {c,cxx} to guess the compiler. Based on this
   information we can then choose the standard, experimental features, etc.
   For example:

   using cxx.guess

   if ($cxx.id == 'clang')
     cxx.features.modules = false

   cxx.std = experimental

   using cxx

 * New {c,cxx}.class variables.

   Compiler class describes a set of compilers that follow more or less
   the same command line interface. Compilers that don't belong to any of
   the existing classes are in classes of their own (say, Sun CC would be
   on its own if we were to support it).

   Currently defined compiler classes:

   gcc   gcc, clang, clang-apple, icc (on non-Windows)
   msvc  msvc, clang-cl, icc (Windows)

 * Support for C/C++ runtime/stdlib detection ({c,cxx}.{runtime,stdlib}
   variables; see cc/guess.hxx for possible values).

 * New __build2_preprocess macro.

   If cc.reprocess is true, the __build2_preprocess is defined during
   dependency extraction. This can be used to work around separate
   preprocessing bugs in the compiler.

 * Support for for-loop. The semantics is similar to the C++11 range-based

   list = 1 2 3
   for i: $list
     print $i

   Note that there is no scoping of any kind for the loop variable ('i' in the
   above example). In the future the plan is to also support more general
   while-loop as well as break and continue.

 * New info meta operation.

   This meta operation can be used to print basic information (name, version,
   source/output roots, etc) for one or more projects.

 * New update-for-{test,install} operation aliases.

 * Support for forwarded configurations with target backlinking. See the
   configure meta-operation discussion in b(1) for details.

 * Improvements to the in module (in.symbol, in.substitution={strict|lax}).

 * New $directory(), $base(), $leaf() and $extension() path functions.

 * New $regex.split(), $regex.merge() and $regex.apply() functions.

 * Support for (parallel) bootstrapping using GNU make makefile.

 * Support for chroot'ed install (aka DESTDIR):

   b config.install.root=/usr config.install.chroot=/tmp/install

 * Support for prerequisite-specific variables, used for the bin.whole
   variable ("link whole archive").

 * Regularize directory target/scope-specific variable assignment syntax:

   $out_root/: foo = bar # target
   $out_root/  foo = bar # scope
     foo = bar           # scope

 * Support for structured result output (--structured-result).

 * Support for build hooks.

   The following buildfiles are loaded (if present) at appropriate times from
   the out_root subdirectories of a project:

   build/bootstrap/pre-*.build   # before loading bootstrap.build
   build/bootstrap/post-*.build  # after  loading bootstrap.build
   build/root/pre-*.build        # before loading root.build
   build/root/post-*.build       # after  loading root.build

 * New run directive.

   Now it is possible to:

   run echo 'foo = bar'
   print $foo

 * New dump directive.

   It can be used to print (to stderr) a human-readable representation of the
   current scope or a list of targets. For example:

   dump                           # Dump current scope.
   dump lib{foo} details/exe{bar} # Dump two targets.

   This is primarily useful for debugging as well as to write build system

bpkg version 0.7.0

  * Support for using git repositories as package repositories. See the
    bpkg-repository-types(1) help topic for details (structure, URL format).

  * Support for ~ and ^ version constraint operators. See the 'depends'
    package manifest value documentation in the bpkg manual for details.

  * The pkg-build command has been significantly reworked. In particular, it
    allows "building" repositories in addition to packages (primarily useful
    with version control-based repositories) and upgrading (--upgrade|-u) or
    patching (--patch|-p) immediate (--immediate|-i) or all (--recursive|-r)
    dependencies of a package. See bpkg-pkg-build(1) for details.

  * The pkg-status has been significantly reworked. In particular, it allows
    querying the status of immediate (--immediate|-i) or all (--recursive|-r)
    dependencies of a package. See bpkg-pkg-status(1) for details.

  * New commands: rep-list, rep-remove, and pkg-checkout. See their respective
    man pages for details.

  * The pkg-{test,install,uninstall} commands now also support --immediate|-i
    and --recursive|-r options (testing/installation of dependencies).

  * The pkg-{update,clean,test,install,uninstall} commands now support the
    --all|-a option.

  * The rep-fetch command now supports shallow fetching and fetching only a
    specific repository. See bpkg-rep-fetch(1) for details.

  * New --for|-f <operation> option to the pkg-update and pkg-build commands.

    This allows executing build2 *-for-X operations (e.g., update-for-install
    or update-for-test) in order to minimize the amount of stuff to be

  * New --fetch-timeout common option.

  * The repositories, packages, and signature files now use the .manifest


More information about the announce mailing list