# file : tests/default-options/testscript # license : MIT; see accompanying LICENSE file # Note that when cross-testing the driver may not be able to run the command # due to the meaningless program path. # #+if ($test.target != $build.host) # exit #end : basic : { sys_dir = $canonicalize([dir_path] $~/build2) +mkdir -p $sys_dir/local +echo '--sys-foo' >=$sys_dir/foo +echo '--sys-bar' >=$sys_dir/bar +echo '--sys-local-foo' >=$sys_dir/local/foo +echo '--sys-local-bar' >=$sys_dir/local/bar home_dir = $canonicalize([dir_path] $~/home) +mkdir -p $home_dir/.build2/local/ +echo '--home-foo' >=$home_dir/.build2/foo +echo '--home-bar' >=$home_dir/.build2/bar +echo '--home-local-foo' >=$home_dir/.build2/local/foo +echo '--home-local-bar' >=$home_dir/.build2/local/bar work_dir = $home_dir/work +mkdir -p $work_dir/.build2/local/ d = $work_dir/.build2 +echo '--work-foo' >=$d/foo +echo '--work-bar' >=$d/bar +echo '--work-local-foo' >=$d/local/foo +echo '--work-local-bar' >=$d/local/bar d = $work_dir/project/.build2 +mkdir -p $d/local/ +touch $work_dir/project/.git +echo '--project-foo' >=$d/foo +echo '--project-bar' >=$d/bar +echo '--project-local-foo' >=$d/local/foo +echo '--project-local-bar' >=$d/local/bar d = $work_dir/project/package/.build2 +mkdir -p $d/local/ +echo '--package-foo' >=$d/foo +echo '--package-fox' >+$d/foo +echo '--package-bar' >=$d/bar +echo '--package-local-foo' >=$d/local/foo +echo '--package-local-bar' >=$d/local/bar +echo '--no-default-options' >=$d/local/baz start_dir = $canonicalize([dir_path] $work_dir/project/package) : entries : $* -e -t -f foo -f bar -d $start_dir -s $sys_dir -h $home_dir >>/~%EOO%d 2>>/~%EOE%d %\.+/build2/foo,--sys-foo,false% %\.+/build2/bar,--sys-bar,false% %\.+/build2/local/foo,--sys-local-foo,false% %\.+/build2/local/bar,--sys-local-bar,false% %\.+/home/.build2/foo,--home-foo,false% %\.+/home/.build2/bar,--home-bar,false% %\.+/home/.build2/local/foo,--home-local-foo,false% %\.+/home/.build2/local/bar,--home-local-bar,false% %\.+/home/work/.build2/foo,--work-foo,false% %\.+/home/work/.build2/bar,--work-bar,false% %\.+/home/work/.build2/local/foo,--work-local-foo,false% %\.+/home/work/.build2/local/bar,--work-local-bar,false% %\.+/home/work/project/.build2/foo,--project-foo,true% %\.+/home/work/project/.build2/bar,--project-bar,true% %\.+/home/work/project/.build2/local/foo,--project-local-foo,true% %\.+/home/work/project/.build2/local/bar,--project-local-bar,true% %\.+/home/work/project/package/.build2/foo,--package-foo --package-fox,true% %\.+/home/work/project/package/.build2/bar,--package-bar,true% %\.+/home/work/project/package/.build2/local/foo,--package-local-foo,true% %\.+/home/work/project/package/.build2/local/bar,--package-local-bar,true% EOO %loading local \.+/home/work/project/package/.build2/local/bar% %loading local \.+/home/work/project/package/.build2/local/foo% %loading local \.+/home/work/project/package/.build2/bar% %loading local \.+/home/work/project/package/.build2/foo% %overwriting remote \.+/home/work/project/package/.build2/local/bar% %overwriting remote \.+/home/work/project/package/.build2/local/foo% %overwriting remote \.+/home/work/project/package/.build2/bar% %overwriting remote \.+/home/work/project/package/.build2/foo% %loading remote \.+/home/work/project/.build2/local/bar% %loading remote \.+/home/work/project/.build2/local/foo% %loading remote \.+/home/work/project/.build2/bar% %loading remote \.+/home/work/project/.build2/foo% %loading local \.+/home/work/.build2/local/bar% %loading local \.+/home/work/.build2/local/foo% %loading local \.+/home/work/.build2/bar% %loading local \.+/home/work/.build2/foo% %loading local \.+/home/.build2/local/bar% %loading local \.+/home/.build2/local/foo% %loading local \.+/home/.build2/bar% %loading local \.+/home/.build2/foo% %loading local \.+/build2/local/bar% %loading local \.+/build2/local/foo% %loading local \.+/build2/bar% %loading local \.+/build2/foo% EOE : merged : $* -f foo -f bar -d $start_dir -s $sys_dir -h $home_dir --cmd-foo --cmd-bar >>EOO --sys-foo --sys-bar --sys-local-foo --sys-local-bar --home-foo --home-bar --home-local-foo --home-local-bar --work-foo --work-bar --work-local-foo --work-local-bar --project-foo --project-bar --project-local-foo --project-local-bar --package-foo --package-fox --package-bar --package-local-foo --package-local-bar --cmd-foo --cmd-bar EOO : no-default-options : $* -e -t -f foo -f baz -f bar -d $start_dir -s $sys_dir -h $home_dir >>/~%EOO%d 2>>/~%EOE%d %\.+/home/work/project/package/.build2/local/foo,--package-local-foo,true% %\.+/home/work/project/package/.build2/local/baz,--no-default-options,true% %\.+/home/work/project/package/.build2/local/bar,--package-local-bar,true% EOO %loading local \.+/home/work/project/package/.build2/local/bar% %loading local \.+/home/work/project/package/.build2/local/baz% %loading local \.+/home/work/project/package/.build2/local/foo% %overwriting remote \.+/home/work/project/package/.build2/local/bar% %overwriting remote \.+/home/work/project/package/.build2/local/baz% %overwriting remote \.+/home/work/project/package/.build2/local/foo% EOE : positions : { : success : $* -f foo -f bar -d $start_dir -m 36 -l 2 >! : fail-file : $* -f foo -f bar -d $start_dir -m 36 -l 1 2>>/~%EOE% != 0 %error: unable to load default options files: too many options in file .+/package/\.build2/foo% EOE : fail-globally : $* -f foo -f bar -d $start_dir -m 100 -l 10 2>>EOE != 0 error: unable to load default options files: too many options files EOE } } : args : { home_dir = $canonicalize([dir_path] $~/home) +mkdir -p $home_dir/.build2 +echo '--home' >=$home_dir/.build2/ops +echo 'home' >+$home_dir/.build2/ops start_dir = $canonicalize([dir_path] $home_dir/start) +mkdir -p $start_dir/.build2 +echo '--start1' >=$start_dir/.build2/ops +echo 'start2' >+$start_dir/.build2/ops +echo '--start3' >+$start_dir/.build2/ops +echo 'start4' >+$start_dir/.build2/ops : allowed : $* -a -e -f ops -d $start_dir -h $home_dir >>/~%EOO%d %\.+/home/.build2/ops,--home\|home,false% %\.+/home/start/.build2/ops,--start1 --start3\|start2 start4,false% EOO : disallowed : $* -e -f ops -d $start_dir -h $home_dir 2>>EOE != 0 error: unexpected argument 'start2' EOE : merged : $* -a -f ops -d $start_dir -h $home_dir cmd >>EOO --home --start1 --start3 home start2 start4 cmd EOO } : common-start : { home_dir = $canonicalize([dir_path] $~/home) work_dir = $home_dir/work +mkdir -p $work_dir/.build2 cfg1 = $canonicalize([dir_path] $work_dir/cfg1) cfg2 = $canonicalize([dir_path] $work_dir/cfg2) cfg3 = $canonicalize([dir_path] $cfg2/cfg3) +mkdir -p $work_dir/.build2 $cfg1/.build2 $cfg2/.build2 $cfg3/.build2 +echo '--work' >=$work_dir/.build2/ops +echo '--cfg1' >=$cfg1/.build2/ops +echo '--cfg2' >=$cfg2/.build2/ops +echo '--cfg3' >=$cfg3/.build2/ops : exists : { : single : $* -f ops -d $cfg3 -h $home_dir >>EOO --work --cfg2 --cfg3 EOO : same : $* -f ops -d $cfg1 -d $cfg1 -h $home_dir >>EOO --work --cfg1 EOO : adjacent : $* -f ops -d $cfg1 -d $cfg2 -h $home_dir >>EOO --work EOO : nested : $* -f ops -d $cfg2 -d $cfg3 -h $home_dir >>EOO --work --cfg2 EOO } : not-exists : { : home-reached : $* -f ops -d $cfg1 -d $cfg2 -h $work_dir >>EOO --work EOO : root-reached : if ($cxx.target.class != 'windows') { $* -f ops -d $cfg1 -d /non-existent-directory/cfg2 } } } : extra-dir : { : after-traversal : { home_dir = $canonicalize([dir_path] $~/home); mkdir -p $home_dir/.build2; echo '--home' >=$home_dir/.build2/ops; extra_dir = $canonicalize([dir_path] $home_dir/extra); mkdir -p $extra_dir; echo '--extra' >=$extra_dir/ops; start_dir = $canonicalize([dir_path] $home_dir/start); mkdir -p $start_dir/.build2; echo '--start' >=$start_dir/.build2/ops; $* -e -f ops -d $start_dir -h $home_dir -x $extra_dir >>/~%EOO%d %\.+/home/.build2/ops,--home,false% %\.+/home/extra/ops,--extra,false% %\.+/home/start/.build2/ops,--start,false% EOO } : inside-traversal : { home_dir = $canonicalize([dir_path] $~/home); mkdir -p $home_dir/.build2; echo '--home' >=$home_dir/.build2/ops; d = $home_dir/project/.build2; mkdir -p $d; echo '--project' >=$d/ops; touch $home_dir/project/.git; d = $home_dir/project/package/.build2; mkdir -p $d; echo '--package' >=$d/ops; extra_dir = $canonicalize([dir_path] $home_dir/project/package/extra1); mkdir -p $extra_dir; echo '--extra1' >=$extra_dir/ops; start_dir = $canonicalize([dir_path] $home_dir/project/package); $* -e -f ops -d $start_dir -h $home_dir -x $extra_dir >>/~%EOO%d; %\.+/home/.build2/ops,--home,false% %\.+/home/project/.build2/ops,--project,true% %\.+/home/project/package/.build2/ops,--package,true% %\.+/home/project/package/extra1/ops,--extra1,false% EOO extra_dir = $canonicalize([dir_path] $home_dir/project/package/.build2); $* -e -f ops -d $start_dir -h $home_dir -x $extra_dir/ >>/~%EOO%d; %\.+/home/.build2/ops,--home,false% %\.+/home/project/.build2/ops,--project,true% %\.+/home/project/package/.build2/ops,--package,false% EOO extra_dir = $canonicalize([dir_path] $home_dir/project/extra2); mkdir -p $extra_dir; echo '--extra2' >=$extra_dir/ops; $* -e -f ops -d $start_dir -h $home_dir -x $extra_dir >>/~%EOO%d; %\.+/home/.build2/ops,--home,false% %\.+/home/project/.build2/ops,--project,true% %\.+/home/project/extra2/ops,--extra2,false% %\.+/home/project/package/.build2/ops,--package,true% EOO extra_dir = $canonicalize([dir_path] $home_dir/project/.build2); $* -e -f ops -d $start_dir -h $home_dir -x $extra_dir/ >>/~%EOO%d %\.+/home/.build2/ops,--home,false% %\.+/home/project/.build2/ops,--project,false% %\.+/home/project/package/.build2/ops,--package,true% EOO } } : options-file : { d = work/.build2; mkdir -p work/.build2; cat <=$d/foo; --foo --options-file bar --fox EOI cat <=$d/bar; --bar --options-file baz --box EOI cat <=$d/baz; --baz EOI $* -d $~/work -f foo >>EOO --foo --bar --baz --box --fox EOO }