| # Check variable expansion. |
| # |
| # RUN: %{llbuild} ninja load-manifest %s > %t 2> %t.err |
| # RUN: %{FileCheck} < %t %s |
| # RUN: %{FileCheck} --check-prefix=CHECK-ERR < %t.err %s |
| |
| # CHECK: Top-Level Bindings |
| |
| # CHECK: a1 = "value1" |
| a1 = value1 |
| # CHECK: a2 = "value2" |
| a2 = value2 |
| |
| # Check escape handling. |
| # |
| # CHECK: a3 = "x: $x" |
| a3 = x$:$ $$x |
| # CHECK: a4 = "xx" |
| a4 = x$ |
| x |
| |
| # Check expansion. |
| a5_sub_1 = value |
| a5_sub_2 = nextvalue |
| # CHECK: a5 = "xvaluenextvaluex" |
| a5 = x${a5_sub_1}${a5_sub_2}x |
| # CHECK: a6 = "x!valuenextvalue!x" |
| a6 = x!$a5_sub_1$a5_sub_2!x |
| |
| # Check full range of expansion characters in simple variable references. |
| a7_azAZ09_- = value |
| # CHECK: a7 = "x.value.x" |
| a7 = x.$a7_azAZ09_-.x |
| |
| # Check error handling for escapes and substitution |
| # |
| # CHECK-ERR: error: invalid '$'-escape (literal '$' should be written as '$$') |
| a8 = x$!x |
| # CHECK-ERR: error: invalid variable reference |
| a9 = x${foo |
| # CHECK-ERR: error: invalid variable name in reference |
| a10 = x${foo+bar} |
| |
| |
| # Check that bindings overwrite prior ones. |
| b1_sub = first |
| b1_sub = second |
| # CHECK: b1 = "x.second.x" |
| b1 = x.${b1_sub}.x |
| |
| # Check error handling in deferred expansion. |
| # |
| # CHECK-ERR: error: invalid variable reference {{.*}} during evaluation of 'command' |
| rule DEFERRED |
| command = ECHO ${bar |
| build foo: DEFERRED |
| |