aboutsummaryrefslogtreecommitdiff
path: root/NEWS
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2017-08-07 11:05:43 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2017-08-07 11:05:43 +0200
commit87db64b6a06caabead3ff7e7718d97295f83b869 (patch)
tree943635983318e3cda795f0a964040633fe618d4b /NEWS
parent33f260bce4e2528ada05d12e560dba75408054d4 (diff)
Update NEWS file
Diffstat (limited to 'NEWS')
-rw-r--r--NEWS107
1 files changed, 107 insertions, 0 deletions
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