pref: allow running a .vsh script with just `v build.vsh gcc`, instead of `v run build.vsh gcc` (#12409)
parent
15242d8082
commit
08667c5645
|
@ -79,7 +79,7 @@ fn main() {
|
||||||
util.launch_tool(false, 'vrepl', os.args[1..])
|
util.launch_tool(false, 'vrepl', os.args[1..])
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
args_and_flags := util.join_env_vflags_and_os_args()[1..]
|
mut args_and_flags := util.join_env_vflags_and_os_args()[1..]
|
||||||
prefs, command := pref.parse_args(external_tools, args_and_flags)
|
prefs, command := pref.parse_args(external_tools, args_and_flags)
|
||||||
if prefs.use_cache && os.user_os() == 'windows' {
|
if prefs.use_cache && os.user_os() == 'windows' {
|
||||||
eprintln('-usecache is currently disabled on windows')
|
eprintln('-usecache is currently disabled on windows')
|
||||||
|
|
|
@ -697,6 +697,14 @@ pub fn parse_args(known_external_commands []string, args []string) (&Preferences
|
||||||
if !res.is_bare && res.bare_builtin_dir != '' {
|
if !res.is_bare && res.bare_builtin_dir != '' {
|
||||||
eprintln('`-bare-builtin-dir` must be used with `-freestanding`')
|
eprintln('`-bare-builtin-dir` must be used with `-freestanding`')
|
||||||
}
|
}
|
||||||
|
if command.ends_with('.vsh') {
|
||||||
|
// `v build.vsh gcc` is the same as `v run build.vsh gcc`,
|
||||||
|
// i.e. compiling, then running the script, passing the args
|
||||||
|
// after it to the script:
|
||||||
|
res.is_run = true
|
||||||
|
res.path = command
|
||||||
|
res.run_args = args[command_pos + 1..]
|
||||||
|
}
|
||||||
if command == 'build-module' {
|
if command == 'build-module' {
|
||||||
res.build_mode = .build_module
|
res.build_mode = .build_module
|
||||||
if command_pos + 1 >= args.len {
|
if command_pos + 1 >= args.len {
|
||||||
|
|
|
@ -0,0 +1,36 @@
|
||||||
|
import os
|
||||||
|
import rand
|
||||||
|
|
||||||
|
fn test_envbang_script_runs() ? {
|
||||||
|
env_location := '/usr/bin/env'
|
||||||
|
$if windows {
|
||||||
|
skip_test('windows does not support envbang lines')
|
||||||
|
}
|
||||||
|
if !os.exists(env_location) {
|
||||||
|
skip_test('$env_location does not exist')
|
||||||
|
}
|
||||||
|
if !os.is_executable(env_location) {
|
||||||
|
skip_test('$env_location is not executable')
|
||||||
|
}
|
||||||
|
os.find_abs_path_of_executable('v') or { skip_test('v is not in PATH') }
|
||||||
|
rndname := rand.ulid()
|
||||||
|
rnd_vsh_script_path := os.real_path(os.join_path(os.cache_dir(), '${rndname}.vsh'))
|
||||||
|
os.write_file(rnd_vsh_script_path, "#!$env_location v
|
||||||
|
import os
|
||||||
|
println('hello')
|
||||||
|
println(os.args)
|
||||||
|
") ?
|
||||||
|
os.chmod(rnd_vsh_script_path, 0o700) ?
|
||||||
|
res := os.execute('"$rnd_vsh_script_path" abc 123 -option')
|
||||||
|
assert res.exit_code == 0
|
||||||
|
lines := res.output.split_into_lines()
|
||||||
|
assert lines[0] == 'hello'
|
||||||
|
assert lines[1].ends_with(", 'abc', '123', '-option']")
|
||||||
|
os.rm(rnd_vsh_script_path) ?
|
||||||
|
}
|
||||||
|
|
||||||
|
[noreturn]
|
||||||
|
fn skip_test(reason string) {
|
||||||
|
println('skipping test, because $reason .')
|
||||||
|
exit(0)
|
||||||
|
}
|
Loading…
Reference in New Issue