73 lines
2.1 KiB
V
73 lines
2.1 KiB
V
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('##################################################################')
|
|
}
|