aboutsummaryrefslogtreecommitdiff
path: root/libbuild2
AgeCommit message (Collapse)AuthorFilesLines
2022-10-10Preparatory work for public/private variable distinctionBoris Kolpackov31-112/+357
We still always use the public var_pool from context but where required, all access now goes through scope::var_pool().
2022-10-10Use term shared instead of global for scope, var pool, etcBoris Kolpackov4-30/+32
2022-10-05Check for `-`-spelled cl.exe options in addition to `/`-spelledBoris Kolpackov1-19/+29
2022-09-30Move integer and bool function to separate source/testscript filesBoris Kolpackov4-158/+202
2022-09-29Tighten low-verbosity diagnostics name deduction logicBoris Kolpackov3-4/+61
Specifically, don't try to derive low-verbosity name from what looks like an eval context of a function call.
2022-09-29Add $find(<sequence>, <value>), $find_index(<sequence>, <value>) functionsBoris Kolpackov4-2/+155
The $find() function returns true if the sequence contains the specified value. The $find_index() function returns the index of the first element in the sequence that is equal to the specified value or $size(<sequence>) if none is found. For string sequences, it's possible to request case- insensitive comparison with a flag.
2022-09-29Fix variable append logic in scriptBoris Kolpackov8-91/+105
2022-09-28Don't print true and false script builtins at verbosity level 2Karen Arutyunov1-1/+4
2022-09-28Add support for 'for' loop first form (for x:...) in scriptKaren Arutyunov11-103/+903
2022-09-28Add support for 'while' loop in scriptKaren Arutyunov23-298/+1040
2022-09-28Omit -l for binless libraries, metadata from common .pc fileBoris Kolpackov2-4/+26
Having -l options for binless (header-only) libraries makes it unusable from other build systems. But omitting them could make the metadata incomplete (for example, importable headers), so we omit that as well.
2022-09-28Add support for typed value subscriptBoris Kolpackov1-5/+37
2022-09-27List dbghelp and mincore as system Windows librariesBoris Kolpackov1-0/+2
2022-09-27List winhttp and powrprof as system Windows librariesBoris Kolpackov1-0/+2
2022-09-27Fix bug in handling of name patterns with trailing dotKaren Arutyunov1-1/+8
2022-09-27Allow search to find implied alias targetsBoris Kolpackov1-2/+7
Allowing this seems harmless since all the alias does is pull its prerequisites. And they are handy to use as metadata carriers.
2022-09-27Improve diagnostics for multiple targets sharing pathBoris Kolpackov1-3/+13
2022-09-23Add $is_a(<name>, <target-type>), $filter[_out](<names>, <target-types>) ↵Boris Kolpackov1-12/+118
functions $is_a() returns true if the <name>'s target type is-a <target-type>. Note that this is a dynamic type check that takes into account target type inheritance. $filter[_out]() return names with target types which are-a (filter) or not are-a (filter_out) one of <target-types>. In particular, these functions are useful for filtering prerequisite targets ($<) in ad hoc recipes and rules.
2022-09-22Add $integer_sequence(<begin>, <end>[, <step>]) functionBoris Kolpackov1-0/+31
It returns the list of uint64 integers starting from <begin> (including) to <end> (excluding) with the specified <step> or 1 if unspecified. For example: hdr = foo.hxx bar.hxx baz.hxx src = foo.cxx bar.cxx baz.cxx assert ($size($hdr) == $size($src)) "hdr and src expected to be parallel" for i: $integer_sequence(0, $size($hdr)) { h = ($hdr[$i]) s = ($src[$i]) ... }
2022-09-22Add support for hex notation for uint64 typeBoris Kolpackov3-13/+85
Specifically, now we can do: x = [uint64] 0x0000ffff cxx.poptions += "-DOFFSET=$x" # -DOFFSET=65535 cxx.poptions += "-DOFFSET=$string($x, 16)" # -DOFFSET=0xffff cxx.poptions += "-DOFFSET=$string($x, 16, 8)" # -DOFFSET=0x0000ffff Note that there is no hex notation support for the int64 (signed) type.
2022-09-21Add winrt Platform SDK header search path for MSVCBoris Kolpackov1-3/+4
This is required, for example, to build QtGui.
2022-09-21Fix regression in dynamic dependency extraction, byproduct modeBoris Kolpackov4-15/+43
2022-09-19Fix race between load and match phase logic in cc:search_library()Boris Kolpackov1-12/+25
2022-09-19Add target_lock::first to distinguish first lock of targetBoris Kolpackov3-11/+15
2022-09-19Allow computed variables in depdb preamble similar to impure functionsBoris Kolpackov4-10/+50
2022-09-16Register fallback dist meta-operation rule for out of project targetsBoris Kolpackov3-4/+18
The problematic scenario this fixes is an ad hoc pattern rule (which we register for dist in order to inject any additional sources; see parser.cxx for details) that pulls a tool imported from the system (say /usr/bin/xxd).
2022-09-13Add $builtin.concat(dir_path, dir_path) and $builtin.concat(dir_path, path) ↵Karen Arutyunov1-0/+10
overloads
2022-09-13Fix bug in handling of disabled recipes in ad hoc pattern rulesBoris Kolpackov1-3/+16
2022-09-12Add note on backlink=overwrite modeBoris Kolpackov1-1/+23
2022-09-12Do not treat primary ad hoc group member as group for variable lookupBoris Kolpackov3-4/+38
Note that we started with this semantics but it was changed in a commit on 2021-09-16 for reasons not entirely unclear but most likely due to target- specific variables specified for the group not being set on all the members. Which we have now addressed (see the previous commit). Note also that this new (old) semantics is not without its own drawbacks. Specifically, there is a bit of waste when the target-specific variable is really only meant for the recipe and thus setting it on all the members is unnecessary. For example: <{hxx ixx cxx}{options}>: cli{options} { options = ... } {{ # Use options. }} But this feels like a quality of implementation rather than conceptual issue. For example, we could likely one day address it by synthesizing a separate group target for ad hoc groups.
2022-09-09Evaluate target specific variable assignment/block on ad hoc membersBoris Kolpackov2-37/+113
This is in preparation for (again) not treating primary member of an ad hoc group as a group for variable lookup.
2022-09-07Fix assert after cycle detection in ad hoc groupsBoris Kolpackov1-31/+31
2022-09-07Fix fsdir{} handling corner cases in ad hoc buildscript recipes/rulesdist-remapBoris Kolpackov4-11/+39
2022-09-06Add ability to remap paths in distributionBoris Kolpackov2-29/+102
Specifically, the dist target-specific variable now can specify a path besides true or false. This path is the "imaginary" source location which is used to derive the corresponding distribution local. This location can be either a directory path (to remap with the same file name) or a file path (to remap with a different name). If the path is relative, then it's treated relative to the target directory. Note that to make things less error prone, simple paths without any directory separators are not allowed (use ./<name> instead). Note that if multiple targets end up with the same source location, the behavior is undefined and no diagnostics is issued. Note also that such remapping has no effect in the bootstrap distribution mode.
2022-09-05Allow empty prerequisites in prerequisite-specific variable assignment/blockBoris Kolpackov1-27/+52
The old semantics was not very consistent, consider: exe{foo}: cxx{$empty} # Ok. exe{foo}: cxx{$empty}: include = false # Not ok? So now both are ok, as well as the block variant: exe{foo}: cxx{$empty}: { include = false } Note that the empty prerequisite list in the dependency chain is still an error: ./: exe{$empty}: cxx{foo} # Error. Note also that the syntactically-empty prerequisite list was and still is an error: exe{foo}: : include = false # Error.
2022-09-02Add missing if! support in recipesBoris Kolpackov1-2/+2
2022-09-02Add ability to specify `in` rule substitution as key-value pairsBoris Kolpackov7-12/+65
2022-09-02Rename in.substitution variable to in.modeBoris Kolpackov2-2/+6
The original name is still recognized for backwards compatibility.
2022-08-22Manually check values for NULL when using low-level function interfaceBoris Kolpackov2-1/+14
2022-08-17Allow matching empty output with here-document regex without ':' modifierKaren Arutyunov1-0/+25
2022-08-17Fix bug in handling of "in *.export.libs but not in prerequisites" caseBoris Kolpackov1-5/+16
2022-08-17If cl.exe path is specified then extract VC tools directory from this pathKaren Arutyunov1-32/+74
2022-08-17Handle another "in *.export.libs but not in prerequisites" caseBoris Kolpackov3-49/+78
Also, enable this check even if proc_lib is not specified unless in the execute phase.
2022-08-17Get rid of Clang warningBoris Kolpackov1-0/+2
2022-08-16Improve MSVC /DEBUG option handlingBoris Kolpackov1-19/+26
Specifically, handle the /DEBUG:<value> form in addition to /DEBUG and recognize /DEBUG:NONE.
2022-08-02Make bash.in rule match exe{} without bash{} modules with hintBoris Kolpackov2-8/+9
2022-07-29Change version to 0.16.0-a.0.zBoris Kolpackov1-1/+1
2022-07-28Release version 0.15.0v0.15.0Boris Kolpackov1-1/+1
2022-07-26Remove unused codeBoris Kolpackov1-66/+0
2022-07-26Disable risky sanity checkBoris Kolpackov1-1/+3