aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2022-04-14Add header cache to cc::compile_rule::enter_header()Boris Kolpackov6-35/+202
2022-04-13Fix bug in previous commitBoris Kolpackov1-1/+1
2022-04-13Prune library graph traversal for recursively-binless librariesBoris Kolpackov3-57/+213
2022-04-13Add automatic interface dependency deduplication in cc::process_libraries()Boris Kolpackov3-18/+92
2022-04-13Cache target base scope lookupsBoris Kolpackov4-21/+84
2022-04-08Fix race in phase lock contention countingBoris Kolpackov3-9/+12
2022-04-08Register ad hoc rules for configure in addition to distBoris Kolpackov1-8/+12
2022-04-08Optimize update_during_match()Boris Kolpackov2-8/+17
2022-04-08Add phase switch contention to build statisticsBoris Kolpackov3-11/+40
2022-04-08Add hint-less rule match pass for non-perform meta-operations as fallbackBoris Kolpackov1-116/+143
2022-04-07Rename {match,execute}() to *_sync(), add *_complete()Boris Kolpackov14-138/+161
In particular, the match() rename makes sure it doesn't clash with rule::match() which, after removal of the hint argument in simple_rule, has exactly the same signature, thus making it error-prone to calling recursively.
2022-04-06Get rid of stray trailing commasBoris Kolpackov1-6/+6
2022-04-06Work around Clang warningsBoris Kolpackov1-0/+4
2022-04-06Add support for specifying custom ad hoc pattern rule namesBoris Kolpackov2-7/+61
Besides diagnostics, this allows us to use name in the rule hint, for example: [rule_name=hello.link] exe{~'/(.*)/'}: obje{~'/\1/'} {{ $cxx.path -o $path($>) $path($<[0]) }} [rule_hint=hello] exe{hello}: obje{hello} obje{hello}: c{hello-c}
2022-04-06Add support for rule hintsBoris Kolpackov58-253/+648
A rule hint is a target attribute, for example: [rule_hint=cxx] exe{hello}: c{hello} Rule hints can be used to resolve ambiguity when multiple rules match the same target as well as to override an unambiguous match.
2022-03-31Use own type information instead of dynamic_cast in target::is_a()Boris Kolpackov3-24/+35
2022-03-31Get rid of unnecessary dynamic_cast callBoris Kolpackov1-3/+5
2022-03-31Add missing init_process() call in regex unit testBoris Kolpackov1-0/+5
2022-03-30Infrastructure for library metadata supportBoris Kolpackov4-10/+335
2022-03-29Add variable_map::lookup_namespace(string) overloadBoris Kolpackov4-8/+14
2022-03-28Respect dry-run in Windows assembly creation logicBoris Kolpackov1-3/+8
2022-03-28Add ability to customize pkg-config header and library search pathsBoris Kolpackov6-17/+85
Specifically, {cc,c,cxx}.pkgconfig.{include,lib} variables specify header (-I) and library (-L) search paths to use in the generated .pc files instead of the default install.{include,lib}. Relative paths are resolved as install paths.
2022-03-25Store bin.whole flag in pkg-config filesBoris Kolpackov2-14/+47
2022-03-23Add note on disfig.* variables ideaBoris Kolpackov1-0/+16
2022-03-23Document config.config.disfigureBoris Kolpackov1-1/+19
2022-03-23Make project configuration variables non-nullable by defaultBoris Kolpackov3-18/+99
A project configuration variable with the NULL default value is naturally assumed nullable, for example: config [string] config.libhello.fallback_name ?= [null] Otherwise, to make a project configuration nullable we use the `null` variable attribute, for example: config [string, null] config.libhello.fallback_name ?= "World"
2022-03-23Clarify config::save_*_omitted semanticsBoris Kolpackov1-5/+12
2022-03-22Add ability to disfigure specific configuration variablesBoris Kolpackov1-0/+27
The new config.config.disfigure variable can be used to specify the list of variables to ignore when loading config.build (and any files specified in config.config.load), letting them to take on the default values. For example: $ b configure config.config.disfigure=config.hello.fancy
2022-03-21Filter out exe{} prerequisites in install group rule similar to file ruleBoris Kolpackov2-0/+29
2022-03-21Make sure install group rule take precedence over fallback file ruleBoris Kolpackov1-2/+8
2022-03-17Handle absolute POSIX paths in MinGW GCC search pathsBoris Kolpackov1-2/+34
2022-03-17Diagnose invalid paths in -print-search-dirs outputBoris Kolpackov1-8/+28
For example, some mis-configured MinGW GCC builds include /mingw/lib.
2022-03-15Don't consider mtime of failed to unmatch prerequisite in ad hoc recipeBoris Kolpackov2-4/+7
2022-03-11Add JSON format support for --structured-result option and info meta operationKaren Arutyunov20-242/+964
2022-03-11Allow effective quoting for names that need curly braces in their ↵Karen Arutyunov2-5/+4
representations
2022-03-10Update manual to match new header pre-generation functionalityBoris Kolpackov1-25/+22
2022-03-10Fix operator<<(ostream,target_state)Karen Arutyunov2-0/+4
2022-03-10Add reverse_execute_prerequisites() variantBoris Kolpackov4-14/+154
2022-03-10Remove update variable from source of synthesized dependencyBoris Kolpackov1-1/+14
2022-03-09Rename execute_wait() to execute()Boris Kolpackov3-26/+23
The old half-way semantics of execute() wasn't useful.
2022-03-09Parallel implementation of update_during_match_prerequisites()Boris Kolpackov5-34/+150
2022-03-08Improve performance of update during match for multiple targetsBoris Kolpackov5-19/+95
2022-03-08Update C/C++ headers and ad hoc sources during match by defaultBoris Kolpackov1-19/+50
Essentially, all headers as well as ad hoc headers and sources are now treated by the cc::link_rule as if they had update=match unless explicit update=execute is specified.
2022-03-08Add update=execute special value for cases where it's not defaultBoris Kolpackov3-4/+6
2022-03-07Fix operation-specific variables logic for inner/outer operationsBoris Kolpackov6-23/+52
2022-03-07Add support for update=unmatch|match to ad hoc recipesBoris Kolpackov10-48/+217
2022-03-04Convert stream names to lower case in documentationKaren Arutyunov2-7/+7
2022-03-02Add update operation-specific variable with unmatch|match additional valuesBoris Kolpackov24-148/+395
Note that the unmatch (match but do not update) and match (update during match) values are only supported by certain rules (and potentially only for certain prerequisite types). Additionally: - All operation-specific variables are now checked for false as an override for the prerequisite-specific include value. In particular, this can now be used to disable a prerequisite for update, for example: ./: exe{test}: update = false - The cc::link_rule now supports the update=match value for headers and ad hoc prerequisites. In particular, this can be used to make sure all the library headers are updated before matching any of its (or dependent's) object files.
2022-02-24Add note on disabling subprojects/amalgamations import searchBoris Kolpackov1-0/+10
2022-02-21Factor process-wide initialization to init_process() functionBoris Kolpackov8-85/+109