aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2015-12-03Use 'extension' variable for cxx target types, .*xx extensions by defaultBoris Kolpackov2-16/+18
One can also do: define cpp: cxx cpp{*}: extension = cpp cpp{foo}: # foo.cpp
2015-12-03Strip leading '.' from extension variable valuesBoris Kolpackov1-1/+7
2015-12-03Implement new potential directive keyword testBoris Kolpackov7-13/+61
Now we can use directive names as variables and targets type, for example: print = foo # variable print{foo}: # target
2015-12-03Clean up rule namesBoris Kolpackov10-201/+235
2015-12-03Print libbutl versionBoris Kolpackov1-0/+2
2015-12-03Bump version to 0.1.0.a1Boris Kolpackov3-3/+3
2015-12-03Add ability for module to remember that it is unconfiguredBoris Kolpackov5-24/+65
A module can set and then check the config.*.configured special variable to false.
2015-12-03Implement if-else conditionsBoris Kolpackov5-20/+311
if if! elif elif! else The expression should evaluate to true of false. The if! and elif! versions are provided as shortcuts to writing if (!...). See tests/if-else for examples.
2015-12-02Redo extension derivation for file{}, doc{}, and cli{}Boris Kolpackov6-22/+39
We now first check the 'extension' variable, then use the default.
2015-12-02Add support for optional configuration for cli moduleBoris Kolpackov2-47/+101
2015-12-02Don't write config.{loaded,configured} special variables to config.buildBoris Kolpackov1-0/+6
2015-12-02Implement optional module loadingBoris Kolpackov31-193/+332
The syntax is: using? cli Now each module use results in two bool variables: <module>.loaded and <module>.configured. Also implement variable visibility (the above two variables are limited to project).
2015-12-01Use 'extension' variable to resolve extension for file{}Boris Kolpackov7-78/+127
We now also check target type/pattern-specific variables. So the new usage is: cli{*}: extension = cli
2015-12-01Reimplement define as dynamic derivation rather than aliasBoris Kolpackov14-161/+109
New syntax: define cli: file The rationale is we need to be able to assign the file extension (using type/pattern-specific variables). And if it is an alias, we will assign it to the original target type. Note that we could still support aliases if we need to. Will need to bring back the id member in target_type that would normally point to itself but for an alias would point to the origin.
2015-12-01Implement support for definition target type aliasesBoris Kolpackov16-86/+262
For example: define cli=file Currently, the semantics is that of a real alias with only name differences that are used for display. See tests/define/buildfile for more use cases.
2015-12-01Override outer configuration install paths that contain package nameBoris Kolpackov3-32/+55
2015-12-01Fix INSTALL exclusionBoris Kolpackov1-1/+1
2015-11-30Don't try to install targets from other projectsBoris Kolpackov3-2/+28
2015-11-30Add install supportBoris Kolpackov3-5/+7
2015-11-30Tighten unresolved group logicBoris Kolpackov4-17/+39
Now a wildcard/fallback rule should explicitly detect and handle unresolved situation.
2015-11-30Implement dist support for including/excluding targetsBoris Kolpackov3-5/+19
For example: cxx{*-options}: dist = true
2015-11-30Implement target type/pattern-specific variablesBoris Kolpackov4-28/+148
For example: cxx{*-options}: dist = true 1. Only single '*' wildcard is supported, matches 0 or more characters. 2. If target type is not specified, it defaults to any target. 3. Appending (+=) is not allowed. 4. The value is expanded immediately in the context of the scope. 5. The more specific pattern (i.e., with the shortest "stem") is preferred. If the stem has the same length, then the last defined (but not redefined) pattern is used. This will probably have to change to become an error. See tests/variable/type-pattern for more examples.
2015-11-30Add cli{} prerequisite if cli.cxx{} group doesn't have anyBoris Kolpackov1-4/+7
This happens when we use the group only for setting cli.options. Not very clean.
2015-11-30Cosmetic changeBoris Kolpackov1-52/+52
2015-11-29Allow for target group members to remain unresolvedBoris Kolpackov5-17/+27
This, for example, can happen when we have a fallback rule for dist(update) or configure(update).
2015-11-28Add support for distBoris Kolpackov3-13/+59
2015-11-28Add support for name crosses, for example {hxx ixx cxx}{foo bar}Boris Kolpackov5-31/+217
See tests/names for more examples.
2015-11-28Include export.build from loaded, src-amalgamated subprojectsBoris Kolpackov1-3/+25
2015-11-28Minor changeBoris Kolpackov1-1/+1
2015-11-28Bump version to 0.1.0Boris Kolpackov2-2/+2
2015-11-28Fix separated { handling in names parserBoris Kolpackov1-2/+2
'foo/ {a b}' should be equivalent to 'foo/ a b', not 'foo/a foo/b'.
2015-11-28Update INSTALL, bootstrap with revised stepsBoris Kolpackov2-32/+54
2015-11-24Add missing #includeBoris Kolpackov1-0/+1
2015-11-24Account for dangling/inaccessible linksBoris Kolpackov1-1/+12
2015-09-25Quote arguments with spaces in print_process()Boris Kolpackov1-4/+17
2015-09-11Use install::alisa_rule to ignore non-installable prerequisitesBoris Kolpackov5-9/+66
2015-09-11Check amalgamation itself when searching for imported projectBoris Kolpackov1-1/+10
2015-09-11Handle file io failures in parserBoris Kolpackov4-84/+99
2015-09-11Add support for unnamed projectsBoris Kolpackov8-5/+34
Sometimes (e.g., in bpkg configuration) we don't have a project name. In fact, it is not really a project; it can never be referenced in an import directive. So we now have a notion of an unnamed project. Such a project should still have the 'project' variable set first thing in bootstrap.build but its value should be empty. Note that we can still amalgamate such projects just liked named ones.
2015-09-11Preserve pairs in expansionBoris Kolpackov1-0/+6
2015-09-10Reimplement buildspec parsing to deal with eval contextBoris Kolpackov1-71/+108
In short, in buildspec, parens are treated as operation application rather than eval context unless double-quoted. So in 'clean(foo)' we have the clean operation on target foo while in '"clean(foo)"' we have target cleanfoo. Also, as a bonus, we can now do {clean update}(/long/target/name/).
2015-09-10Fix bug in names() chunking modeBoris Kolpackov1-4/+4
2015-09-10Add support for token pre-processing in lexerBoris Kolpackov2-2/+21
2015-09-10Lexer test fixesBoris Kolpackov1-4/+4
2015-09-10Add support for chunking name parsingBoris Kolpackov6-27/+146
2015-09-09For newline escaping, ignore whole thing instead of making it newlineBoris Kolpackov6-5/+44
To capture literal newline, use quoting.
2015-09-09Add support for quoting directive namesBoris Kolpackov9-48/+57
Now only unquoted, literal names are recognized as directives, for example: 'print' = abc print $print
2015-09-09Add initial support for function calls: $func(a b c)Boris Kolpackov5-27/+85
Now it is just a stub that prints the function name and its argument. Currently only single argument can be passed (no value pack support yet).
2015-09-09Add support for evaluation contextBoris Kolpackov13-131/+276
For now it acts as just the value mode that can be enabled anywhere variable expansion is supported, for example: (foo=bar): And the primary use currently is to enable/test quoted and indirect variable expansion: "foo bar" = FOO BAR print $"foo bar" # Invalid. print $("foo bar") # Yeah, baby. foo = FOO FOO = foo print $($foo) Not that you should do something like this...
2015-09-09Reimplement double quote lexing to avoid "implied quote" trickBoris Kolpackov6-105/+105