path: root/libbuild2
AgeCommit message (Collapse)AuthorFilesLines
2020-08-25Add missing move() callBoris Kolpackov1-1/+3
2020-08-25Fix bug in interaction of unmatch logic with target groupsBoris Kolpackov3-3/+23
2020-08-24Only suggest ad hoc path import for path-based targetsBoris Kolpackov1-6/+10
2020-08-24Use representation when passing target_triplet as hintBoris Kolpackov4-3/+4
2020-08-24Add copying version of convert<T>(value)Boris Kolpackov4-12/+52
2020-08-18Add ability to mark config.* variables as "unsaved" (always transient)Boris Kolpackov5-19/+40
2020-08-17Add mvfile() filesystem utility functionBoris Kolpackov3-19/+33
2020-08-16Add support for post-configure and pre-disfigure hooksBoris Kolpackov7-27/+131
2020-08-16Add ability to initialize bootstrapped modules after loading root.buildBoris Kolpackov8-34/+64
2020-08-16Redo modules map as vectorBoris Kolpackov3-43/+74
2020-08-13Fix assertion failure in to_stream() for target key without extensionKaren Arutyunov1-2/+2
Also fix a similar assertion.
2020-08-13Add few more run() overloadsBoris Kolpackov1-2/+17
2020-08-12Adjust linker arguments for LTO parallelizationMatthew Krupcale1-0/+54
GCC 10+ and Clang 4+ support controlling the number of LTO threads/jobs used during linking. Use the build2 scheduler to allocate up to the number of hardware threads to the GCC or Clang linker processes when -flto=auto or -flto=thin is specified, respectively. Otherwise, GCC or Clang will attempt to spawn the number of hardware threads detected for each linker process, which could result in up to n^2 linker threads on a CPU with n hardware threads.
2020-08-12Add iterator-based versions of find_option{,_prefix}Matthew Krupcale2-3/+61
This allows one to use all of the properties of iterators to manipulate the found option.
2020-08-12Add int64 and int64s variable typesBoris Kolpackov5-2/+115
2020-08-11Add another variable_pool::insert() overloadBoris Kolpackov1-0/+9
2020-08-10Fix bug scheduler::allocate/deallocate()Boris Kolpackov1-2/+2
2020-08-10Allow holes in group_view arrayBoris Kolpackov4-13/+50
2020-08-07Add ability to allocate additional active threads to current threadBoris Kolpackov2-3/+102
2020-08-06Double default task queue sizeBoris Kolpackov1-1/+1
Testing shows quite a lot of "full" conditions on low core count (e.g., 2) CPUs (such as Intel U-series).
2020-08-04Fix 'target.path() called out of scope' testscript errorKaren Arutyunov1-0/+7
2020-08-03Fix buildscript diagnostics so diff output is always in unified formatKaren Arutyunov2-12/+48
Also make sure diff refers program stdout as 'stdout' rather than '-' in the test rule diagnostics.
2020-07-23Escape quotes in .pc file values besides spaces and backslashesKaren Arutyunov1-1/+1
2020-07-21Change to version 0.14.0-a.0.zBoris Kolpackov1-1/+1
2020-07-18Release version 0.13.0v0.13.0Boris Kolpackov1-1/+1
2020-07-18Work around Clang bug #45021Boris Kolpackov1-0/+10
2020-07-18Add $regex.find_match() and $regex.find_search() functionsKaren Arutyunov1-0/+98
2020-07-17Fix race in path/mtime assignment and file_rule::match()Boris Kolpackov7-30/+43
2020-07-17Add optimized derive_path_with_extension(), use in file_ruleBoris Kolpackov4-14/+42
2020-07-17Use -fexternc-nounwind by default for Clang targeting MSVCBoris Kolpackov1-5/+27
This option implements the 'c' part in /EHsc and is not a mere optimization; see Clang bug #45021 for details.
2020-07-16Save original compiler path/mode in {c,cxx}.config.path/modeBoris Kolpackov5-9/+21
It turns out that when propagating {c,cxx}.config in tests we don't want to propagate any options (such as *.std) that have been folded into our project's mode.
2020-07-14Fix Clang warningBoris Kolpackov2-0/+4
2020-07-14Recognize `build2` as special module name in addition to `build`Boris Kolpackov1-2/+2
This is for consistency with version constraints in manifest.
2020-07-13Fix version check in using directiveBoris Kolpackov1-8/+9
2020-07-13Reserve backtick (`) and bit-or (|) in eval context for future useBoris Kolpackov5-4/+20
Specifically, they are reserved for future support of arithmetic evaluation contexts and evaluation pipelines, respectively.
2020-07-13Add ability to extend rule interface in source-compatible mannerBoris Kolpackov11-22/+67
2020-07-13Fold translated *.std options into compiler mode optionsBoris Kolpackov8-55/+35
This way they are accessible in ad hoc recipes.
2020-07-12Rename rule-adhoc-* to adhoc-rule-*Boris Kolpackov5-15/+15
2020-07-12Cache subprojects variable value in scope::root_extraBoris Kolpackov7-55/+59
2020-07-10Relax prerequisite filtering semantics of aliases for clean operationBoris Kolpackov2-4/+7
This is analogous to what has been done to test and install a couple of commits before.
2020-07-10Add support for project-local importationBoris Kolpackov1-11/+19
An import without a project name or with the same name as the importing project's is now treated as importation from the same project. For example, given the libhello project that exports the lib{hello} target, a buildfile for an executable in the same project instead of doing something like this: include ../libhello/ exe{hello}: ../libhello/lib{hello} Can now do this: import lib = libhello%lib{hello} Or: import lib = lib{hello} And then: exe{hello}: $lib Note that a target in project-local importation must still be exported in the project's export stub. In other words, project-local importation goes through the same mechanisms as normal import.
2020-07-10Tweak rule namesBoris Kolpackov3-3/+4
2020-07-09Make sure update-for-{test,install} works for files out of any projectBoris Kolpackov2-2/+18
2020-07-09Relax prerequisite filtering semantics of aliases in test and install rulesBoris Kolpackov3-5/+11
2020-07-09Add support for ad hoc importationBoris Kolpackov7-144/+415
2020-07-09Get rid of no longer needed friendBoris Kolpackov1-4/+0
2020-07-08Fix bug in switch_scope()Boris Kolpackov1-1/+1
2020-07-07Make sure paths used to insert target are canonicalizedBoris Kolpackov1-3/+9
2020-07-07Skip sources of executables in cc::install_ruleBoris Kolpackov2-9/+28
Failed that, they may pull headers via an ad hoc group.
2020-07-06Adjust variable block applicability in dependency chainsBoris Kolpackov2-109/+124
Before the block used to apply to the set of prerequisites before the last `:`. This turned out to be counterintuitive and not very useful since prerequisite-specific variables are a lot less common than target specific. And it doesn't fit with ad hoc recipes. The new rule is if the chain ends with `:`, then the block applies to the last set of prerequisites. Otherwise, it applies to the last set of targets. For example: ./: exe{test}: cxx{main} { test = true # Applies to the exe{test} target. } ./: exe{test}: libue{test}: { bin.whole = false # Applies to the libue{test} prerequisite. } This is actually consistent with both non-chain and non-block cases. Consider: exe{test}: cxx{main} { test = true } exe{test}: libue{test}: { bin.whole = false } exe{test}: libue{test}: bin.whole = false The only exception we now have in this overall approach of "if the dependency declaration ends with a colon, then what follows is for a prerequisite" is for the first semicolon: exe{test}: { test = true } exe{test}: test = true But that's probably intuitive enough since there cannot be a prerequisite without a target.