aboutsummaryrefslogtreecommitdiff
path: root/libbuild2
AgeCommit message (Collapse)AuthorFilesLines
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
2022-07-17Map VC 17 to runtime version 14.3Boris Kolpackov2-3/+6
2022-07-13Work around "storing address of local variable" warning issued by GCC 12Boris Kolpackov1-1/+1
The warning is issued inside the target_lock's move constructor so we sidestep the whole thing by avoiding the call to the move constructor.
2022-07-08Fix script::parser::need_cmdline_relex()Karen Arutyunov1-1/+1
2022-07-07Use new cmdline type for canned command lines in {Build,Test}scriptBoris Kolpackov12-73/+389
2022-07-07Fix incorrect function family assignment for $target.process_path()Boris Kolpackov1-1/+1
2022-07-05Drop unused lambda captureBoris Kolpackov1-2/+1
2022-07-05Switch to using libpkg-config instead of libpkgconf by defaultBoris Kolpackov3-7/+276
The use of (now deprecated) libpkgconf is still possible by setting config.build2.libpkgconf to true. Note that libpkgconf is known to have issues on Windows and Mac OS so this should only be used on Linux and maybe BSDs. Also note that we will only keep this until upstream (again) breaks backwards compatibility at which point we will drop this support.
2022-07-05Recognize special .for_install variable suffix in library user metadataBoris Kolpackov2-26/+95
2022-07-04Work around VC16 issueBoris Kolpackov1-0/+2
2022-07-04Factor libpkgconf-based pkgconfig implementation to separate source fileBoris Kolpackov3-461/+499
2022-07-02Minor cleanups in class pkgconf implementationBoris Kolpackov1-22/+32
2022-07-02Add note on version we save in pkg-config filesBoris Kolpackov1-0/+14
2022-07-01Regenerate options parsing filesKaren Arutyunov4-47/+162