aboutsummaryrefslogtreecommitdiff
path: root/libbuild2
AgeCommit message (Collapse)AuthorFilesLines
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
2022-07-26Re-enable temporarily disable tests (part of cmdline work)Boris Kolpackov2-10/+2
2022-07-26Add <libbuild2/dyndep.hxx> to list of headers pre-included for C++ recipesBoris Kolpackov1-0/+1
2022-07-25Use 'C:\Program Files' instead of 'C:\Program Files (x86)' in documentationKaren Arutyunov1-1/+1
2022-07-25Fix typo in commentBoris Kolpackov1-1/+1
2022-07-21Make LLVM tools (ar, lld, etc) detection more robustBoris Kolpackov1-6/+18
2022-07-21Use bundle scope when deciding whether project is being distributedBoris Kolpackov1-2/+3
2022-07-21Map Apple Clang 13.1.6 to vanilla Clang 12.0.0Boris Kolpackov1-18/+20
2022-07-21Fix bug in common .pc file generation logic (GitHub issue #198)Boris Kolpackov1-1/+1
2022-07-21Add link to HOWTO entry in conditional dependency declaration warningBoris Kolpackov1-1/+3
2022-07-21Don't issue conditional dependency declaration warning for imported projectsBoris Kolpackov3-9/+46
2022-07-20Fix bug in cc::pkconfig_save()Boris Kolpackov1-1/+1
2022-07-20Tweak diagnosticsBoris Kolpackov1-1/+1
2022-07-20Adjust conditional dependency declaration warning logicBoris Kolpackov2-13/+19
Now instead of ignoring imported stuff (which turned out to be racy), we only consider conditions up to the include boundary. The thinking here is that an included (but not sourced) buildfile is a standalone entity (e.g., imported project but also could be just a side-included buildfile). Note that unfortunately we will still be issuing warnings in imported projects since there is no straightforward way to know what is being distributed and what is not while parsing.
2022-07-20Adjust to match libpkg-config interface/semantics changesBoris Kolpackov1-5/+25
2022-07-19Warn about conditional dependency declarations during distributionBoris Kolpackov2-0/+51
2022-07-19Fix bug in target::matched()Boris Kolpackov2-7/+7