aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2024-12-06Adapt to renaming of some butl::{ucase,lcase,sanitize_identifier}() function ↵Karen Arutyunov3-4/+5
overloads
2024-11-26Sanitize as identifiers <name>/<type in config.import.<proj>.<name>.<type>Boris Kolpackov2-14/+26
2024-11-20Handle config.import.*.<name>.lib in cc::search_library()Boris Kolpackov3-57/+114
In particular, this provides support for using prefixed/suffixed installed libraries (GH issue #449).
2024-11-20Handle config.import.*.<name>.{liba,libs} in cc::search_library()Boris Kolpackov2-54/+212
In particular, this provides support for using prefixed/suffixed installed libraries (GH issue #449). Note that the current implementation only supports immediate import but it feels like this limitation can be removed with some effort in the future.
2024-11-20Generalize config::specified_config()Boris Kolpackov4-23/+39
2024-11-18Only install runtime part of static library prerequisites of share libraries ↵Boris Kolpackov5-8/+58
(GH issue #448)
2024-11-18Drop some disabled code that is unlikely to be neededBoris Kolpackov1-132/+0
2024-11-06Make $target.path() work for dir{} and fsdir{} targetsBoris Kolpackov1-2/+6
2024-11-04Add support for symlinks as group{} members in ad hoc recipes (GH issue #445)Boris Kolpackov1-34/+72
We already had this support for file{} targets so this feels like a natural extension.
2024-11-04Redo group_prerequisites to use snapshots of prerequisites (GH issue #408)Boris Kolpackov5-32/+54
It turns out both target and group prerequisites can be replaced during dependency synthesis in more obscure cases.
2024-10-29Minor performance optimizationBoris Kolpackov1-5/+7
2024-10-29Tweak some more fix for data race in ad hoc member state when group is postponedBoris Kolpackov2-4/+4
2024-10-29Tweak fix for data race in ad hoc member state when group is postponedBoris Kolpackov1-7/+7
2024-10-29Add note on relative paths in compiledbBoris Kolpackov1-2/+12
2024-10-28Make $regex.*search() functions not to match empty substrings in non empty ↵Karen Arutyunov4-9/+127
strings
2024-10-28Fix data race in ad hoc member state when group is postponedBoris Kolpackov3-9/+28
2024-10-23Minor tweak to compiledb documentationBoris Kolpackov1-0/+4
2024-10-23Add config.cc.compiledb=<path> shortcut for placing file into source directoryBoris Kolpackov2-18/+142
2024-10-23Fix bug in compiledb parsing logic (GH issue #441)Boris Kolpackov1-5/+6
Also improve diagnostics around invalid compiledb format.
2024-10-16Stop on first error for install and uninstall operationsBoris Kolpackov4-8/+34
2024-10-10Tune match progress for more accurate update during match figureBoris Kolpackov1-1/+1
2024-10-10Don't match group-based targets with fallback rule during configure (GH #364)Boris Kolpackov4-8/+19
Membership of such targets can only be accurately determined by the ad hoc recipe.
2024-10-09Add support for JSON compilation database generation and maintenanceBoris Kolpackov14-64/+2283
See the "Compilation Database" section in the "cc Module" chapter of the manual for details.
2024-10-08Expose custom save function in config moduleBoris Kolpackov7-42/+90
It can generally be useful, for example, to complete relative paths before saving them to config.build (if abs_dir_path does not fit).
2024-10-08Add context-wide pre/post operation callbacksBoris Kolpackov7-128/+307
2024-10-08Add uxtheme.lib to list of Windows system librariesBoris Kolpackov1-0/+1
2024-10-03Make header cache case-sensitive on Windows (GH issue #390)Boris Kolpackov2-4/+29
2024-10-03Show executed during match target count in match progressBoris Kolpackov4-43/+74
2024-09-30Add ability to specify custom MSVC /MACHINE valueBoris Kolpackov1-10/+24
This, for example, can be used to link for ARM64EC instead of the default ARM64: "config.cxx=cl.exe /arm64EC" config.cc.loptions=/MACHINE:ARM64EC
2024-09-30Fix more issues in MSVC ARM64 supportBoris Kolpackov2-5/+11
2024-09-30Fix issues in MSVC ARM64 supportBoris Kolpackov2-11/+22
2024-09-30Update find builtin description in Testscript manualKaren Arutyunov1-1/+3
2024-09-25Use type-aware iteration in script for-loop (GH issue #436)Boris Kolpackov6-44/+123
2024-09-25Fix few broken links in manualBoris Kolpackov1-3/+3
2024-09-11Make b-dist in bootstrap mode to ignore .git*, .bdep, .bpkg, and .build2 ↵Karen Arutyunov1-3/+7
file targets rather than .*
2024-09-05Fix bug in whole archive prerequisite change trackingBoris Kolpackov1-3/+3
2024-09-05Don't suppress duplicate libraries if linking whole archive (GH issue #411)Boris Kolpackov1-3/+10
2024-09-04Turn standard streams into blocking mode on start (GH issue 417)Karen Arutyunov1-3/+21
2024-08-30Add absolute compiler path to compiler checksumBoris Kolpackov2-4/+9
In particular, this will allow us to use depdb change tracking to also detect changes to compilation database entries.
2024-08-29Improve diagnostics around importationBoris Kolpackov1-9/+12
2024-08-28Don't assume preprocessed TU exists if reprocessing (GH issue #409)Boris Kolpackov1-2/+3
2024-08-27Handle invalid scope paths specified in buildfile (GH issue #396)Boris Kolpackov1-14/+28
2024-08-21Don't work own queue in wait_guard dtorBoris Kolpackov2-4/+12
There is suspicion this causes a deadlock for reasons so far unclear. See also GH issue #319.
2024-08-06Add support for specifying compile options on exe/lib{} targetsBoris Kolpackov2-38/+354
It is now possible to specify compile option (*.poptions and *.coptions) on the exe/lib{} targets (we call them "binary-specific compile options"). Such options are propagated to obj/bmi{} targets that are synthesized for source prerequisites of the binary. Note that this propagation does not apply to obj/bmi{} prerequisites. For example: exe{foo}: cxx{foo} obj{common} { cxx.poptions += -DFOO } exe{bar}: cxx{bar} obj{common} { cxx.poptions += -DBAR } obj{common}: cxx{common} { cxx.poptions += -DCOMMON } In this example, cxx{foo} will be compiled with -DFOO, cxx{bar} -- with -DBAR, and cxx{common} -- with -DCOMMON. Note that if a source prerequisite is shared between several binaries, then the values of the propagated compile options (or their absence) must match. For instance, the following variant of the above example would result in an error since cxx{common} would have contradictory cxx.poptions values: exe{foo}: cxx{foo common} { cxx.poptions += -DFOO } exe{bar}: cxx{bar common} { cxx.poptions += -DBAR } As another example, here is how we can rewrite a typical library buildfile (which requires different macros to distinguish between shared/static builds) using this mechanism, in this case, to build two libraries in the same scope: ./: lib{foo}: {hxx cxx}{*-foo} ./: lib{bar}: {hxx cxx}{*-bar} cxx.poptions =+ "-I$out_root" "-I$src_root" lib{foo}: { cxx.poptions += -DFOO cxx.export.poptions = "-I$out_root" "-I$src_root" } liba{foo}: { cxx.poptions += -DLIBFOO_STATIC_BUILD cxx.export.poptions += -DLIBFOO_STATIC } libs{foo}: { cxx.poptions += -DLIBFOO_SHARED_BUILD cxx.export.poptions += -DLIBFOO_SHARED } lib{bar}: { cxx.poptions += -DBAR cxx.export.poptions = "-I$out_root" "-I$src_root" } liba{bar}: { cxx.poptions += -DLIBBAR_STATIC_BUILD cxx.export.poptions += -DLIBBAR_STATIC } libs{bar}: { cxx.poptions += -DLIBBAR_SHARED_BUILD cxx.export.poptions += -DLIBBAR_SHARED } The exact semantics of this mechanism is as-if the binary-specific compile options were set on the synthesized obj/bmi{} targets at the end of the buildfile. One nuance to keep in mind is that target type/pattern-specific assign/append/prepend specified for obj/bmi{} will not be in effect for options specified on lib/exe{}. For example: cxx.poptions += -DSCOPE obj{*}: cxx.poptions += -DTARGET exe{foo}: cxx.poptions += -DFOO Here the effective cxx.poptions for exe{foo} prerequisites will be -DSCOPE -DFOO since exe{foo} does not match the obj{*} pattern. As result, if using this mechanism, remember to include the binary target types in obj{} patterns. For example: {obj exe}{*}: cxx.poptions += -DTARGET
2024-08-06Rename certain target_set::insert() versions to insert_implied() for clarityBoris Kolpackov7-57/+64
Also clarify the target_decl documentation.
2024-07-31Add cross-reference noteBoris Kolpackov1-0/+3
2024-07-31Add lookup limit to {scope,target}::lookup_original()Boris Kolpackov9-80/+100
2024-07-29Fix bug in $string.{contains,ends_with,replace}() (GH issue #405)Boris Kolpackov2-2/+4
These functions use the common rfind() helper which contains the bug.
2024-07-29Add scope::lookup_original_info() that provides additional info about lookupBoris Kolpackov4-28/+56
2024-07-28Factor out and generalize/extend to_stream_quoted(string)Boris Kolpackov3-44/+80