From 87db64b6a06caabead3ff7e7718d97295f83b869 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Mon, 7 Aug 2017 11:05:43 +0200 Subject: Update NEWS file --- NEWS | 107 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) (limited to 'NEWS') diff --git a/NEWS b/NEWS index eef9d62..7e64cae 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,110 @@ +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 librart 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. + # + 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 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 + example: + + 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 + variable: + + cc.reprocess = true + obj{hello}: cc.reprocess = false + + As as well externally via the config.cc.reprocess variable: + + b config.cc.reprocess=true + Version 0.5.0 * Parallel build system execution, including header dependency extraction -- cgit v1.1