aboutsummaryrefslogtreecommitdiff
path: root/tests
AgeCommit message (Collapse)AuthorFilesLines
2022-10-25Allow concatenation of path/dir_path type to be a path patternKaren Arutyunov2-1/+30
2022-10-21Add support for pairs in script 'for x:...' loopKaren Arutyunov1-0/+34
2022-10-21Change attribute syntax in script to come after variable in set and for (set ↵Karen Arutyunov3-41/+99
x [...], for x [...])
2022-10-20Add support for for-loop element typeKaren Arutyunov1-0/+14
2022-10-18Fix unexpected 'unterminated double-quoted sequence' script errorKaren Arutyunov2-0/+65
2022-10-18Invent diag preamble for buildscriptKaren Arutyunov2-1/+23
2022-10-14Make -w|--whitespace to be default for for-loopKaren Arutyunov1-6/+17
2022-10-14Fix printing test id multiple times on test failureKaren Arutyunov1-0/+26
2022-10-13Fix script 'for' loop testsKaren Arutyunov2-3/+3
2022-10-13Add support for 'for' loop second (... | for x) and third (for x <...) forms ↵Karen Arutyunov3-14/+1249
in script
2022-10-13Add test for public/private variable modelBoris Kolpackov2-0/+50
2022-10-13Switch to public/private variables modelBoris Kolpackov2-40/+40
Now unqualified variables are project-private and can be typified.
2022-09-30Move integer and bool function to separate source/testscript filesBoris Kolpackov3-39/+47
2022-09-29Add $find(<sequence>, <value>), $find_index(<sequence>, <value>) functionsBoris Kolpackov4-2/+60
The $find() function returns true if the sequence contains the specified value. The $find_index() function returns the index of the first element in the sequence that is equal to the specified value or $size(<sequence>) if none is found. For string sequences, it's possible to request case- insensitive comparison with a flag.
2022-09-28Add support for 'for' loop first form (for x:...) in scriptKaren Arutyunov2-0/+164
2022-09-28Add support for 'while' loop in scriptKaren Arutyunov4-20/+62
2022-09-27Fix test for handling of name patterns with trailing dotKaren Arutyunov1-1/+1
2022-09-23Add $is_a(<name>, <target-type>), $filter[_out](<names>, <target-types>) ↵Boris Kolpackov1-0/+36
functions $is_a() returns true if the <name>'s target type is-a <target-type>. Note that this is a dynamic type check that takes into account target type inheritance. $filter[_out]() return names with target types which are-a (filter) or not are-a (filter_out) one of <target-types>. In particular, these functions are useful for filtering prerequisite targets ($<) in ad hoc recipes and rules.
2022-09-22Add $integer_sequence(<begin>, <end>[, <step>]) functionBoris Kolpackov1-0/+8
It returns the list of uint64 integers starting from <begin> (including) to <end> (excluding) with the specified <step> or 1 if unspecified. For example: hdr = foo.hxx bar.hxx baz.hxx src = foo.cxx bar.cxx baz.cxx assert ($size($hdr) == $size($src)) "hdr and src expected to be parallel" for i: $integer_sequence(0, $size($hdr)) { h = ($hdr[$i]) s = ($src[$i]) ... }
2022-09-22Add support for hex notation for uint64 typeBoris Kolpackov1-0/+8
Specifically, now we can do: x = [uint64] 0x0000ffff cxx.poptions += "-DOFFSET=$x" # -DOFFSET=65535 cxx.poptions += "-DOFFSET=$string($x, 16)" # -DOFFSET=0xffff cxx.poptions += "-DOFFSET=$string($x, 16, 8)" # -DOFFSET=0x0000ffff Note that there is no hex notation support for the int64 (signed) type.
2022-09-19Allow computed variables in depdb preamble similar to impure functionsBoris Kolpackov1-5/+27
2022-09-02Add ability to specify `in` rule substitution as key-value pairsBoris Kolpackov1-2/+27
2022-09-02Rename in.substitution variable to in.modeBoris Kolpackov1-1/+1
The original name is still recognized for backwards compatibility.
2022-07-08Fix some tests to match canned command line semanticsKaren Arutyunov4-4/+4
2022-07-07Use new cmdline type for canned command lines in {Build,Test}scriptBoris Kolpackov5-6/+30
2022-06-28Add support for querying out-qualified target-specific variablesBoris Kolpackov2-8/+11
2022-04-19Use target recipe for auxiliary data storage during match-applyBoris Kolpackov1-2/+2
In particular, we now have separate auxiliary data storage for inner and outer operations.
2022-03-23Make project configuration variables non-nullable by defaultBoris Kolpackov1-3/+33
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-02-21Factor process-wide initialization to init_process() functionBoris Kolpackov1-1/+1
2022-02-14Fix module loading in libbuild2 testBoris Kolpackov1-8/+17
2022-02-10Make few global types separately constructible/initializableBoris Kolpackov1-1/+1
2022-01-26Make bash module install into bin/<project>.bash/ to avoid clashesBoris Kolpackov1-2/+2
Also, expect the first component in the import path to be full project name even in case it has the .bash extension.
2022-01-18Add dynamic prerequisites to $< unless --adhoc is specifiedBoris Kolpackov1-57/+152
Also add a few tests for depdb-dyndep.
2021-12-02Fix path function test failure on WindowsBoris Kolpackov1-1/+1
2021-12-02Add $root_directory(<path>) functionBoris Kolpackov1-0/+22
2021-12-02Add $relative(<path>,<dir-path>) functionBoris Kolpackov1-0/+6
2021-11-26Add $size(string), $size(path), and $size(dir_path) functionsBoris Kolpackov2-0/+18
2021-11-16Disable C++20 modules tests for MinGW GCCBoris Kolpackov1-0/+7
Things appear to be completely broken in GCC 11.x.
2021-11-04Fix testBoris Kolpackov1-1/+1
2021-11-04Add $size() function to get size of sequence (names, strings, etc)Boris Kolpackov3-5/+24
2021-11-02Add $sort() functionBoris Kolpackov3-1/+34
Available overloads: $sort(<names> [, <flags>]) $sort(<ints> [, <flags>]) $sort(<strings> [, <flags>]) $sort(<paths> [, <flags>]) $sort(<dir_paths> [, <flags>]) The following flag is supported by the all overloads: dedup - in addition to sorting also remove duplicates Additionally, the strings overload also support the following flag: icase - sort ignoring case Note that on case-insensitive filesystem the paths and dir_paths overload's order is case-insensitive.
2021-10-13Add --cwd|-t option to env pseudo-builtinKaren Arutyunov2-60/+106
2021-09-28Adapt to libbutl headers extension change from .mxx to .hxxKaren Arutyunov1-4/+4
2021-09-24Fortify tests against NDEBUGKaren Arutyunov4-1/+12
2021-09-14Consistently install prerequisites from any scope by defaultBoris Kolpackov1-0/+1
It is also now possible to adjust this behavior with global config.install.scope override. Valid values for this variable are: project -- only from project strong -- from strong amalgamation weak -- from weak amalgamation global -- from all projects (default)
2021-07-08Also disable GCC -Wstringop-overread in testsBoris Kolpackov1-1/+2
2021-06-09Fix cxx pattern rule testBoris Kolpackov1-6/+7
2021-06-08Redo low verbosity diagnostic deduction to use scope instead of targetBoris Kolpackov1-45/+20
2021-06-08Get rid of special *{} wildcard target type notation in target type/patternsBoris Kolpackov1-1/+1
Explicit target{} should be used instead. Also, in this context, absent target type is now treated as file{} rather than target{}, for consistency with all other cases.
2021-06-08Implement ad hoc regex pattern rule supportBoris Kolpackov3-2/+79
An ad hoc pattern rule consists of a pattern that mimics a dependency declaration followed by one or more recipes. For example: exe{~'/(.*)/'}: cxx{~'/\1/'} {{ $cxx.path -o $path($>) $path($<[0]) }} If a pattern matches a dependency declaration of a target, then the recipe is used to perform the corresponding operation on this target. For example, the following dependency declaration matches the above pattern which means the rule's recipe will be used to update this target: exe{hello}: cxx{hello} While the following declarations do not match the above pattern: exe{hello}: c{hello} # Type mismatch. exe{hello}: cxx{howdy} # Name mismatch. On the left hand side of `:` in the pattern we can have a single target or an ad hoc target group. The single target or the first (primary) ad hoc group member must be a regex pattern (~). The rest of the ad hoc group members can be patterns or substitutions (^). For example: <exe{~'/(.*)/'} file{^'/\1.map/'}>: cxx{~'/\1/'} {{ $cxx.path -o $path($>[0]) "-Wl,-Map=$path($>[1])" $path($<[0]) }} On the left hand side of `:` in the pattern we have prerequisites which can be patterns, substitutions, or non-patterns. For example: <exe{~'/(.*)/'} file{^'/\1.map/'}>: cxx{~'/\1/'} hxx{^'/\1/'} hxx{common} {{ $cxx.path -o $path($>[0]) "-Wl,-Map=$path($>[1])" $path($<[0]) }} Substitutions on the left hand side of `:` and substitutions and non-patterns on the right hand side are added to the dependency declaration. For example, given the above rule and dependency declaration, the effective dependency is going to be: <exe{hello} file{hello.map>: cxx{hello} hxx{hello} hxx{common}