module scripting import os pub fn verbose_trace(label string, message string){ if os.getenv('VERBOSE').len > 0 { slabel := 'scripting.${label}' println('# ${slabel:30s} : $message') } } pub fn verbose_trace_exec_result(x os.Result) { if os.getenv('VERBOSE').len > 0 { println('# cmd.exit_code : ${x.exit_code.str()}') println('# cmd.output :') println('# ----------------------------------- #') mut lnum := 1 lines := x.output.split_into_lines() for line in lines { println('# ${lnum:3d}: $line') lnum++ } println('# ----------------------------------- #') } } pub fn chdir(path string) { verbose_trace(@FN, 'cd $path') os.chdir( path ) } pub fn run(cmd string) string { verbose_trace(@FN, cmd) x := os.exec(cmd) or { return '' } verbose_trace_exec_result( x ) if x.exit_code == 0 { return x.output } return '' } pub fn command_exits_with_zero_status(cmd string) bool { verbose_trace(@FN, cmd) x := os.exec(cmd) or { return false } verbose_trace_exec_result( x ) if x.exit_code == 0 { return true } return false } pub fn tool_must_exist(toolcmd string) { verbose_trace(@FN, toolcmd) if command_exits_with_zero_status( 'type $toolcmd' ) { return } eprintln('Missing tool: $toolcmd') eprintln('Please try again after you install it.') exit(1) } pub fn used_tools_must_exist(tools []string) { for t in tools { tool_must_exist(t) } } pub fn check_v_commit_timestamp_before_self_rebuilding(v_timestamp int) { if v_timestamp >= 1561805697 { return } eprintln('##################################################################') eprintln('# WARNING: v self rebuilding, before 5b7a1e8 (2019-06-29 12:21) #') eprintln('# required the v executable to be built *inside* #') eprintln('# the toplevel compiler/ folder. #') eprintln('# #') eprintln('# That is not supported by this tool. #') eprintln('# You will have to build it manually there. #') eprintln('##################################################################') }