#! /usr/bin/env bash verbose=n # By default when MSYS2 executable (bash.exe in particular) runs another # executable it converts arguments that look like POSIX paths to Windows # representations. More about it at: # # http://www.mingw.org/wiki/Posix_path_conversion # # So when you run b /v=X, build2 gets 'C:/msys64/v=X' argument instead of # '/v=X'. To disable this behavior set MSYS2_ARG_CONV_EXCL environment # variable, so all arguments starting with / will not be converted. You can # list more prefixes using ';' as a separator. # export MSYS2_ARG_CONV_EXCL=/ tmp_file=`mktemp` # Remove temporary file on exit. Cover the case when exit due to an error. # trap 'rm -f $tmp_file' EXIT function error () { echo "$*" 1>&2; exit 1; } function fail () { if [ "$verbose" = "y" ]; then b $* else b -q $* 2>/dev/null fi if [ $? -eq 0 ]; then error "succeeded: b $*" fi return 0 } function test () { b -q $* >$tmp_file if [ $? -ne 0 ]; then error "failed: b -q $* >$tmp_file" fi diff --strip-trailing-cr -u - $tmp_file if [ $? -ne 0 ]; then error "failed: b $*" fi } fail foo=bar[] # error: unexpected [ in variable assignment 'foo=bar[]' fail foo=[string]bar # error: typed override of variable foo fail "!foo=bar" "!foo=BAR" # error: multiple global overrides of variable foo fail "foo=bar" "foo=BAR" # error: multiple project overrides of variable foo fail "%foo=bar" "%foo=BAR" # error: multiple project overrides of variable foo test --buildfile simple foo=bar ./ ./ <<< "bar" # Multiple bootstraps of the same project. # Visibility/qualification. # test !v=X <