aboutsummaryrefslogtreecommitdiff
path: root/build/parser
AgeCommit message (Collapse)AuthorFilesLines
2016-01-05Rename build directory/namespace to build2Boris Kolpackov1-296/+0
2015-12-16Implement support for multiple scope/targets in variable assignmentBoris Kolpackov1-5/+97
Can now even do this: foo/ file{*-bar} file{baz}: x = y
2015-12-10Implement two-phase initialization of modules loaded from bootstrap.buildBoris Kolpackov1-2/+7
2015-12-07Add support for specifying minimum required build2 versionBoris Kolpackov1-0/+3
The syntax is: using build@0.1.0-a1 The idea is that we will later also use it for modules and 'build' is a special, the "build system itself" module. Also fix a problem with peeking and lexer mode switching.
2015-12-03Implement new potential directive keyword testBoris Kolpackov1-0/+5
Now we can use directive names as variables and targets type, for example: print = foo # variable print{foo}: # target
2015-12-03Implement if-else conditionsBoris Kolpackov1-0/+13
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-01Implement support for definition target type aliasesBoris Kolpackov1-0/+3
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-11-30Implement target type/pattern-specific variablesBoris Kolpackov1-0/+4
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-28Add support for name crosses, for example {hxx ixx cxx}{foo bar}Boris Kolpackov1-0/+8
See tests/names for more examples.
2015-09-10Add support for chunking name parsingBoris Kolpackov1-7/+12
2015-09-09Add support for evaluation contextBoris Kolpackov1-0/+3
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-08-31Clean parser implementationBoris Kolpackov1-7/+0
2015-08-31Rework scoping logicBoris Kolpackov1-0/+9
Now the src directory is entered into the scope map and points to the same scope as out. This means that targets that are in src, not out (e.g., source files) will "see" rules, variables, etc. This becomes important when we try, for example, to install a source file (say, a header) from src: we need the rule as well as the install.* variables.
2015-08-27Dist module/meta-operation initial implementationBoris Kolpackov1-0/+5
2015-08-24New variable architectureBoris Kolpackov1-8/+7
2015-07-15Implement project-qualified names/prerequisites, two-stage importBoris Kolpackov1-3/+6
2015-06-18Move path and filesystem from build2 to libbutlBoris Kolpackov1-2/+1
2015-05-11Correct copyrightBoris Kolpackov1-1/+1
2015-04-29Add support for setting target-specific variables from buildfilesBoris Kolpackov1-2/+6
2015-04-28Second iteration over import/export supportBoris Kolpackov1-0/+11
2015-04-13Add separate type to represent directory pathsBoris Kolpackov1-4/+4
2015-04-13Add initial import supportBoris Kolpackov1-5/+12
2015-04-07Initial support for amalgamation/subprojectsBoris Kolpackov1-0/+3
For now both need to be manually specified in src bootstrap. At this stage main() loads any outer root scopes while include loads any inner.
2015-03-30Initial support for command line variablesBoris Kolpackov1-0/+6
2015-03-24Make meta-operations control build loop; add disfigure skeletonBoris Kolpackov1-1/+1
2015-03-20New consolidated load/match/build loopBoris Kolpackov1-1/+1
2015-03-18Implement complete root/base detection, basic module supportBoris Kolpackov1-0/+3
This is the initial groundwork for the configuration support.
2015-03-09Add support for skipping already loaded/included buildfiles at top levelBoris Kolpackov1-5/+3
The idea is that a buildfile shall be included/loaded only once for any given out_root.
2015-03-07Add support for buildspecBoris Kolpackov1-2/+11
2015-03-06Add support for lexing and parsing name pairsBoris Kolpackov1-2/+3
We will need it for the buildspec and also if/when we support map variable types.
2015-03-04Move roots and bases to appropriate scopesBoris Kolpackov1-0/+3
2015-03-03Implement new default target logic, canonical directory name (empty value)Boris Kolpackov1-0/+8
The logic is as follows: if we have an explicit current directory target, then that's the default target. Otherwise, we take the first target and use it as a prerequisite to create an implicit current directory target, effectively making it the default target via an alias. If there are no targets in this buildfile, then we don't do anything.
2015-03-02Implement variable expansionBoris Kolpackov1-0/+7
2015-03-02Indicate whether token is separated from previous one by whitespacesBoris Kolpackov1-1/+1
2015-02-27Variable assignment, appending supportBoris Kolpackov1-13/+2
2015-02-20Get rid of parse_ prefix in parser function namesBoris Kolpackov1-11/+11
2015-02-19Add support for sourcing/including buildfiles, print, dir{} aliasBoris Kolpackov1-14/+24
2015-01-20Diagnostic infrastructure revampBoris Kolpackov1-12/+15
2015-01-16Add support for directory prefixesBoris Kolpackov1-4/+6
For example: cxx{driver ../{foo bar}} cxx{driver} ../cxx{foo bar}
2014-12-18Initial support for loading dependency info from buildfilesBoris Kolpackov1-4/+18
Also a new iteration on the overall architecture. Now, for the first time, build can read the buildfile and build itself. g++-4.9 -std=c++14 -g -I.. -o bd bd.cxx algorithm.cxx scope.cxx parser.cxx lexer.cxx target.cxx prerequisite.cxx rule.cxx native.cxx cxx/target.cxx cxx/rule.cxx process.cxx timestamp.cxx path.cxx g++-4.9 -std=c++14 -g -I../../.. -o driver driver.cxx ../../../build/lexer.cxx g++-4.9 -std=c++14 -g -I../../.. -o driver driver.cxx ../../../build/lexer.cxx ../../../build/parser.cxx ../../../build/scope.cxx ../../../build/target.cxx ../../../build/native.cxx ../../../build/prerequisite.cxx ../../../build/path.cxx ../../../build/timestamp.cxx
2014-12-15Parse directory scopesBoris Kolpackov1-2/+16
2014-12-12Initial buildfile parser implementationBoris Kolpackov1-0/+55
g++-4.9 -std=c++14 -g -I../../.. -o driver driver.cxx ../../../build/lexer.cxx ../../../build/parser.cxx && ./driver