os: merge with filepath
parent
5e541e1f11
commit
783dee1f48
|
@ -5,13 +5,12 @@
|
||||||
import (
|
import (
|
||||||
os
|
os
|
||||||
time
|
time
|
||||||
filepath
|
|
||||||
)
|
)
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
exe := os.executable()
|
exe := os.executable()
|
||||||
dir := filepath.dir(exe)
|
dir := os.dir(exe)
|
||||||
vdir := filepath.dir(filepath.dir(filepath.dir(dir)))
|
vdir := os.dir(os.dir(os.dir(dir)))
|
||||||
if !os.exists('$vdir/v') && !os.is_dir('$vdir/vlib') {
|
if !os.exists('$vdir/v') && !os.is_dir('$vdir/vlib') {
|
||||||
println('fast.html generator needs to be located in `v/cmd/tools/fast`')
|
println('fast.html generator needs to be located in `v/cmd/tools/fast`')
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,7 +4,6 @@ import (
|
||||||
os
|
os
|
||||||
term
|
term
|
||||||
benchmark
|
benchmark
|
||||||
filepath
|
|
||||||
sync
|
sync
|
||||||
v.pref
|
v.pref
|
||||||
)
|
)
|
||||||
|
@ -96,9 +95,9 @@ fn worker_trunner(p mut sync.PoolProcessor, idx int, thread_id int) voidptr {
|
||||||
file := os.realpath(relative_file)
|
file := os.realpath(relative_file)
|
||||||
// Ensure that the generated binaries will be stored in the temporary folder.
|
// Ensure that the generated binaries will be stored in the temporary folder.
|
||||||
// Remove them after a test passes/fails.
|
// Remove them after a test passes/fails.
|
||||||
fname := filepath.filename(file)
|
fname := os.filename(file)
|
||||||
generated_binary_fname := if os.user_os() == 'windows' { fname.replace('.v', '.exe') } else { fname.replace('.v', '') }
|
generated_binary_fname := if os.user_os() == 'windows' { fname.replace('.v', '.exe') } else { fname.replace('.v', '') }
|
||||||
generated_binary_fpath := filepath.join(tmpd,generated_binary_fname)
|
generated_binary_fpath := os.join(tmpd,generated_binary_fname)
|
||||||
if os.exists(generated_binary_fpath) {
|
if os.exists(generated_binary_fpath) {
|
||||||
os.rm(generated_binary_fpath)
|
os.rm(generated_binary_fpath)
|
||||||
}
|
}
|
||||||
|
@ -153,7 +152,7 @@ fn worker_trunner(p mut sync.PoolProcessor, idx int, thread_id int) voidptr {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn vlib_should_be_present(parent_dir string) {
|
pub fn vlib_should_be_present(parent_dir string) {
|
||||||
vlib_dir := filepath.join(parent_dir,'vlib')
|
vlib_dir := os.join(parent_dir,'vlib')
|
||||||
if !os.is_dir(vlib_dir) {
|
if !os.is_dir(vlib_dir) {
|
||||||
eprintln('$vlib_dir is missing, it must be next to the V executable')
|
eprintln('$vlib_dir is missing, it must be next to the V executable')
|
||||||
exit(1)
|
exit(1)
|
||||||
|
@ -164,13 +163,13 @@ pub fn v_build_failing(zargs string, folder string) bool {
|
||||||
main_label := 'Building $folder ...'
|
main_label := 'Building $folder ...'
|
||||||
finish_label := 'building $folder'
|
finish_label := 'building $folder'
|
||||||
vexe := pref.vexe_path()
|
vexe := pref.vexe_path()
|
||||||
parent_dir := filepath.dir(vexe)
|
parent_dir := os.dir(vexe)
|
||||||
vlib_should_be_present(parent_dir)
|
vlib_should_be_present(parent_dir)
|
||||||
vargs := zargs.replace(vexe, '')
|
vargs := zargs.replace(vexe, '')
|
||||||
eheader(main_label)
|
eheader(main_label)
|
||||||
eprintln('v compiler args: "$vargs"')
|
eprintln('v compiler args: "$vargs"')
|
||||||
mut session := new_test_session(vargs)
|
mut session := new_test_session(vargs)
|
||||||
files := os.walk_ext(filepath.join(parent_dir,folder), '.v')
|
files := os.walk_ext(os.join(parent_dir,folder), '.v')
|
||||||
mut mains := []string
|
mut mains := []string
|
||||||
for f in files {
|
for f in files {
|
||||||
if !f.contains('modules') && !f.contains('preludes') {
|
if !f.contains('modules') && !f.contains('preludes') {
|
||||||
|
@ -205,7 +204,7 @@ pub fn building_any_v_binaries_failed() bool {
|
||||||
eheader('Building V binaries...')
|
eheader('Building V binaries...')
|
||||||
eprintln('VFLAGS is: "' + os.getenv('VFLAGS') + '"')
|
eprintln('VFLAGS is: "' + os.getenv('VFLAGS') + '"')
|
||||||
vexe := pref.vexe_path()
|
vexe := pref.vexe_path()
|
||||||
parent_dir := filepath.dir(vexe)
|
parent_dir := os.dir(vexe)
|
||||||
testing.vlib_should_be_present(parent_dir)
|
testing.vlib_should_be_present(parent_dir)
|
||||||
os.chdir(parent_dir)
|
os.chdir(parent_dir)
|
||||||
mut failed := false
|
mut failed := false
|
||||||
|
|
|
@ -2,7 +2,6 @@ module vgit
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import flag
|
import flag
|
||||||
import filepath
|
|
||||||
import scripting
|
import scripting
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
@ -42,7 +41,7 @@ pub fn line_to_timestamp_and_commit(line string) (int,string) {
|
||||||
|
|
||||||
pub fn normalized_workpath_for_commit(workdir string, commit string) string {
|
pub fn normalized_workpath_for_commit(workdir string, commit string) string {
|
||||||
nc := 'v_at_' + commit.replace('^', '_').replace('-', '_').replace('/', '_')
|
nc := 'v_at_' + commit.replace('^', '_').replace('-', '_').replace('/', '_')
|
||||||
return os.realpath(workdir + filepath.separator + nc)
|
return os.realpath(workdir + os.path_separator + nc)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn prepare_vc_source(vcdir string, cdir string, commit string) (string,string) {
|
pub fn prepare_vc_source(vcdir string, cdir string, commit string) (string,string) {
|
||||||
|
@ -65,7 +64,7 @@ pub fn prepare_vc_source(vcdir string, cdir string, commit string) (string,strin
|
||||||
|
|
||||||
pub fn clone_or_pull( remote_git_url string, local_worktree_path string ) {
|
pub fn clone_or_pull( remote_git_url string, local_worktree_path string ) {
|
||||||
// NB: after clone_or_pull, the current repo branch is === HEAD === master
|
// NB: after clone_or_pull, the current repo branch is === HEAD === master
|
||||||
if os.is_dir( local_worktree_path ) && os.is_dir(filepath.join(local_worktree_path,'.git')) {
|
if os.is_dir( local_worktree_path ) && os.is_dir(os.join(local_worktree_path,'.git')) {
|
||||||
// Already existing ... Just pulling in this case is faster usually.
|
// Already existing ... Just pulling in this case is faster usually.
|
||||||
scripting.run('git -C "$local_worktree_path" checkout --quiet master')
|
scripting.run('git -C "$local_worktree_path" checkout --quiet master')
|
||||||
scripting.run('git -C "$local_worktree_path" pull --quiet ')
|
scripting.run('git -C "$local_worktree_path" pull --quiet ')
|
||||||
|
@ -97,7 +96,7 @@ pub mut:
|
||||||
|
|
||||||
pub fn (vgit_context mut VGitContext) compile_oldv_if_needed() {
|
pub fn (vgit_context mut VGitContext) compile_oldv_if_needed() {
|
||||||
vgit_context.vexename = if os.user_os() == 'windows' { 'v.exe' } else { 'v' }
|
vgit_context.vexename = if os.user_os() == 'windows' { 'v.exe' } else { 'v' }
|
||||||
vgit_context.vexepath = os.realpath( filepath.join(vgit_context.path_v, vgit_context.vexename) )
|
vgit_context.vexepath = os.realpath( os.join(vgit_context.path_v, vgit_context.vexename) )
|
||||||
mut command_for_building_v_from_c_source := ''
|
mut command_for_building_v_from_c_source := ''
|
||||||
mut command_for_selfbuilding := ''
|
mut command_for_selfbuilding := ''
|
||||||
if 'windows' == os.user_os() {
|
if 'windows' == os.user_os() {
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
import (
|
import (
|
||||||
os
|
os
|
||||||
flag
|
flag
|
||||||
filepath
|
|
||||||
scripting
|
scripting
|
||||||
vgit
|
vgit
|
||||||
)
|
)
|
||||||
|
@ -70,7 +69,7 @@ fn main() {
|
||||||
scripting.used_tools_must_exist(['git', 'cc'])
|
scripting.used_tools_must_exist(['git', 'cc'])
|
||||||
mut context := Context{}
|
mut context := Context{}
|
||||||
mut fp := flag.new_flag_parser(os.args)
|
mut fp := flag.new_flag_parser(os.args)
|
||||||
fp.application(filepath.filename(os.executable()))
|
fp.application(os.filename(os.executable()))
|
||||||
fp.version(tool_version)
|
fp.version(tool_version)
|
||||||
fp.description(tool_description)
|
fp.description(tool_description)
|
||||||
fp.arguments_description('VCOMMIT')
|
fp.arguments_description('VCOMMIT')
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
import (
|
import (
|
||||||
os
|
os
|
||||||
flag
|
flag
|
||||||
filepath
|
|
||||||
scripting
|
scripting
|
||||||
vgit
|
vgit
|
||||||
)
|
)
|
||||||
|
@ -165,7 +164,7 @@ fn (c Context) compare_v_performance(label string, commands []string) string {
|
||||||
hyperfine_commands_arguments << " \'cd ${c.a:-34s} ; ./$cmd \' ".replace_each(['@COMPILER@', source_location_a, '@DEBUG@', debug_option_a])
|
hyperfine_commands_arguments << " \'cd ${c.a:-34s} ; ./$cmd \' ".replace_each(['@COMPILER@', source_location_a, '@DEBUG@', debug_option_a])
|
||||||
}
|
}
|
||||||
// /////////////////////////////////////////////////////////////////////////////
|
// /////////////////////////////////////////////////////////////////////////////
|
||||||
cmd_stats_file := os.realpath([c.workdir, 'v_performance_stats_${label}.json'].join(filepath.separator))
|
cmd_stats_file := os.realpath([c.workdir, 'v_performance_stats_${label}.json'].join(os.path_separator))
|
||||||
comparison_cmd := 'hyperfine $c.hyperfineopts ' + '--export-json ${cmd_stats_file} ' + '--time-unit millisecond ' + '--style full --warmup $c.warmups ' + hyperfine_commands_arguments.join(' ')
|
comparison_cmd := 'hyperfine $c.hyperfineopts ' + '--export-json ${cmd_stats_file} ' + '--time-unit millisecond ' + '--style full --warmup $c.warmups ' + hyperfine_commands_arguments.join(' ')
|
||||||
// /////////////////////////////////////////////////////////////////////////////
|
// /////////////////////////////////////////////////////////////////////////////
|
||||||
if c.verbose {
|
if c.verbose {
|
||||||
|
@ -181,7 +180,7 @@ fn main() {
|
||||||
scripting.used_tools_must_exist(['cp', 'rm', 'strip', 'make', 'git', 'upx', 'cc', 'wc', 'tail', 'hyperfine'])
|
scripting.used_tools_must_exist(['cp', 'rm', 'strip', 'make', 'git', 'upx', 'cc', 'wc', 'tail', 'hyperfine'])
|
||||||
mut context := new_context()
|
mut context := new_context()
|
||||||
mut fp := flag.new_flag_parser(os.args)
|
mut fp := flag.new_flag_parser(os.args)
|
||||||
fp.application(filepath.filename(os.executable()))
|
fp.application(os.filename(os.executable()))
|
||||||
fp.version(tool_version)
|
fp.version(tool_version)
|
||||||
fp.description(tool_description)
|
fp.description(tool_description)
|
||||||
fp.arguments_description('COMMIT_BEFORE [COMMIT_AFTER]')
|
fp.arguments_description('COMMIT_BEFORE [COMMIT_AFTER]')
|
||||||
|
|
|
@ -8,7 +8,7 @@ module main
|
||||||
// / code, instead of in embedded C ...
|
// / code, instead of in embedded C ...
|
||||||
// /////////////////////////////////////////////////////////////////////
|
// /////////////////////////////////////////////////////////////////////
|
||||||
import (
|
import (
|
||||||
filepath
|
os
|
||||||
benchmark
|
benchmark
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -80,7 +80,7 @@ fn (b &BenchedTests) fn_name() string {
|
||||||
// Called at the end of the test program produced by `v -stats file_test.v`
|
// Called at the end of the test program produced by `v -stats file_test.v`
|
||||||
fn (b mut BenchedTests) end_testing() {
|
fn (b mut BenchedTests) end_testing() {
|
||||||
b.bench.stop()
|
b.bench.stop()
|
||||||
println(INNER_INDENT + b.bench.total_message('running V tests in "' + filepath.filename(b.test_suit_file) + '"'))
|
println(INNER_INDENT + b.bench.total_message('running V tests in "' + os.filename(b.test_suit_file) + '"'))
|
||||||
}
|
}
|
||||||
|
|
||||||
// ///////////////////////////////////////////////////////////////////
|
// ///////////////////////////////////////////////////////////////////
|
||||||
|
|
|
@ -2,7 +2,6 @@ module main
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import flag
|
import flag
|
||||||
import filepath
|
|
||||||
|
|
||||||
const (
|
const (
|
||||||
tool_version = '0.0.3'
|
tool_version = '0.0.3'
|
||||||
|
@ -42,7 +41,7 @@ fn (context Context) footer() {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn (context Context) file2v(file string) {
|
fn (context Context) file2v(file string) {
|
||||||
fname := filepath.filename(file)
|
fname := os.filename(file)
|
||||||
fname_no_dots := fname.replace('.', '_')
|
fname_no_dots := fname.replace('.', '_')
|
||||||
byte_name := '${context.prefix}${fname_no_dots}'
|
byte_name := '${context.prefix}${fname_no_dots}'
|
||||||
fbytes := os.read_bytes(file) or {
|
fbytes := os.read_bytes(file) or {
|
||||||
|
|
|
@ -3,7 +3,6 @@ module main
|
||||||
import (
|
import (
|
||||||
os
|
os
|
||||||
testing
|
testing
|
||||||
filepath
|
|
||||||
)
|
)
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
|
@ -15,7 +14,7 @@ fn main() {
|
||||||
exit(1)
|
exit(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
if testing.v_build_failing(params + '-live', filepath.join( 'examples', 'hot_reload')){
|
if testing.v_build_failing(params + '-live', os.join( 'examples', 'hot_reload')){
|
||||||
exit(1)
|
exit(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,6 @@ module main
|
||||||
import (
|
import (
|
||||||
os
|
os
|
||||||
os.cmdline
|
os.cmdline
|
||||||
filepath
|
|
||||||
compiler
|
compiler
|
||||||
v.pref
|
v.pref
|
||||||
v.fmt
|
v.fmt
|
||||||
|
@ -40,7 +39,7 @@ const (
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
toolexe := os.executable()
|
toolexe := os.executable()
|
||||||
compiler.set_vroot_folder(filepath.dir(filepath.dir(filepath.dir(toolexe))))
|
compiler.set_vroot_folder(os.dir(os.dir(os.dir(toolexe))))
|
||||||
args := join_flags_and_argument()
|
args := join_flags_and_argument()
|
||||||
foptions := FormatOptions{
|
foptions := FormatOptions{
|
||||||
is_2: '-2' in args
|
is_2: '-2' in args
|
||||||
|
@ -155,8 +154,8 @@ fn (foptions &FormatOptions) format_file(file string) {
|
||||||
table := table.new_table()
|
table := table.new_table()
|
||||||
file_ast := parser.parse_file(file, table, .parse_comments)
|
file_ast := parser.parse_file(file, table, .parse_comments)
|
||||||
formatted_content := fmt.fmt(file_ast, table)
|
formatted_content := fmt.fmt(file_ast, table)
|
||||||
file_name := filepath.filename(file)
|
file_name := os.filename(file)
|
||||||
vfmt_output_path := filepath.join(os.tmpdir(), 'vfmt_' + file_name)
|
vfmt_output_path := os.join(os.tmpdir(), 'vfmt_' + file_name)
|
||||||
os.write_file(vfmt_output_path, formatted_content )
|
os.write_file(vfmt_output_path, formatted_content )
|
||||||
if foptions.is_verbose {
|
if foptions.is_verbose {
|
||||||
eprintln('vfmt2 fmt.fmt worked and ${formatted_content.len} bytes were written to ${vfmt_output_path} .')
|
eprintln('vfmt2 fmt.fmt worked and ${formatted_content.len} bytes were written to ${vfmt_output_path} .')
|
||||||
|
@ -180,15 +179,15 @@ fn (foptions &FormatOptions) format_file(file string) {
|
||||||
is_test_file := file.ends_with('_test.v')
|
is_test_file := file.ends_with('_test.v')
|
||||||
mod_name,is_module_file := file_to_mod_name_and_is_module_file(file)
|
mod_name,is_module_file := file_to_mod_name_and_is_module_file(file)
|
||||||
use_tmp_main_program := is_module_file && !is_test_file
|
use_tmp_main_program := is_module_file && !is_test_file
|
||||||
mod_folder := filepath.basedir(file)
|
mod_folder := os.basedir(file)
|
||||||
if use_tmp_main_program {
|
if use_tmp_main_program {
|
||||||
// TODO: remove the need for this
|
// TODO: remove the need for this
|
||||||
// This makes a small program that imports the module,
|
// This makes a small program that imports the module,
|
||||||
// so that the module files will get processed by the
|
// so that the module files will get processed by the
|
||||||
// vfmt implementation.
|
// vfmt implementation.
|
||||||
mod_folder_parent = filepath.basedir(mod_folder)
|
mod_folder_parent = os.basedir(mod_folder)
|
||||||
mut main_program_content := if mod_name == 'builtin' || mod_name == 'main' { 'fn main(){}\n' } else { 'import ${mod_name}\n' + 'fn main(){}\n' }
|
mut main_program_content := if mod_name == 'builtin' || mod_name == 'main' { 'fn main(){}\n' } else { 'import ${mod_name}\n' + 'fn main(){}\n' }
|
||||||
main_program_file := filepath.join(tmpfolder,'vfmt_tmp_${mod_name}_program.v')
|
main_program_file := os.join(tmpfolder,'vfmt_tmp_${mod_name}_program.v')
|
||||||
if os.exists(main_program_file) {
|
if os.exists(main_program_file) {
|
||||||
os.rm(main_program_file)
|
os.rm(main_program_file)
|
||||||
}
|
}
|
||||||
|
@ -384,7 +383,7 @@ fn get_compile_name_of_potential_v_project(file string) string {
|
||||||
// This function get_compile_name_of_potential_v_project returns:
|
// This function get_compile_name_of_potential_v_project returns:
|
||||||
// a) the file's folder, if file is part of a v project
|
// a) the file's folder, if file is part of a v project
|
||||||
// b) the file itself, if the file is a standalone v program
|
// b) the file itself, if the file is a standalone v program
|
||||||
pfolder := os.realpath(filepath.dir(file))
|
pfolder := os.realpath(os.dir(file))
|
||||||
// a .v project has many 'module main' files in one folder
|
// a .v project has many 'module main' files in one folder
|
||||||
// if there is only one .v file, then it must be a standalone
|
// if there is only one .v file, then it must be a standalone
|
||||||
all_files_in_pfolder := os.ls(pfolder) or {
|
all_files_in_pfolder := os.ls(pfolder) or {
|
||||||
|
@ -392,7 +391,7 @@ fn get_compile_name_of_potential_v_project(file string) string {
|
||||||
}
|
}
|
||||||
mut vfiles := []string
|
mut vfiles := []string
|
||||||
for f in all_files_in_pfolder {
|
for f in all_files_in_pfolder {
|
||||||
vf := filepath.join(pfolder,f)
|
vf := os.join(pfolder,f)
|
||||||
if f.starts_with('.') || !f.ends_with('.v') || os.is_dir(vf) {
|
if f.starts_with('.') || !f.ends_with('.v') || os.is_dir(vf) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,7 +4,6 @@ import (
|
||||||
os
|
os
|
||||||
flag
|
flag
|
||||||
strings
|
strings
|
||||||
filepath
|
|
||||||
compiler
|
compiler
|
||||||
v.pref
|
v.pref
|
||||||
)
|
)
|
||||||
|
@ -56,10 +55,10 @@ fn analyze_v_file(file string) {
|
||||||
|
|
||||||
fn main(){
|
fn main(){
|
||||||
toolexe := os.executable()
|
toolexe := os.executable()
|
||||||
compiler.set_vroot_folder(filepath.dir(filepath.dir(filepath.dir(toolexe))))
|
compiler.set_vroot_folder(os.dir(os.dir(os.dir(toolexe))))
|
||||||
|
|
||||||
mut fp := flag.new_flag_parser(os.args)
|
mut fp := flag.new_flag_parser(os.args)
|
||||||
fp.application(filepath.filename(toolexe))
|
fp.application(os.filename(toolexe))
|
||||||
fp.version( tool_version )
|
fp.version( tool_version )
|
||||||
fp.description( tool_description )
|
fp.description( tool_description )
|
||||||
fp.arguments_description('FILE.v/FOLDER [FILE.v/FOLDER]...')
|
fp.arguments_description('FILE.v/FOLDER [FILE.v/FOLDER]...')
|
||||||
|
|
|
@ -5,7 +5,6 @@ import (
|
||||||
os
|
os
|
||||||
os.cmdline
|
os.cmdline
|
||||||
json
|
json
|
||||||
filepath
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
@ -177,7 +176,7 @@ fn vpm_install(module_names []string) {
|
||||||
println('Skipping module "$name", since it uses an unsupported VCS {$vcs} .')
|
println('Skipping module "$name", since it uses an unsupported VCS {$vcs} .')
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
final_module_path := os.realpath(filepath.join(settings.vmodules_path,mod.name.replace('.', filepath.separator)))
|
final_module_path := os.realpath(os.join(settings.vmodules_path,mod.name.replace('.', os.path_separator)))
|
||||||
if os.exists(final_module_path) {
|
if os.exists(final_module_path) {
|
||||||
vpm_update([name])
|
vpm_update([name])
|
||||||
continue
|
continue
|
||||||
|
@ -278,7 +277,7 @@ fn vpm_remove(module_names []string) {
|
||||||
os.rmdir_all(final_module_path)
|
os.rmdir_all(final_module_path)
|
||||||
// delete author directory if it is empty
|
// delete author directory if it is empty
|
||||||
author := name.split('.')[0]
|
author := name.split('.')[0]
|
||||||
author_dir := os.realpath(filepath.join(settings.vmodules_path,author))
|
author_dir := os.realpath(os.join(settings.vmodules_path,author))
|
||||||
if os.is_dir_empty(author_dir) {
|
if os.is_dir_empty(author_dir) {
|
||||||
verbose_println('removing author folder $author_dir')
|
verbose_println('removing author folder $author_dir')
|
||||||
os.rmdir(author_dir)
|
os.rmdir(author_dir)
|
||||||
|
@ -287,7 +286,7 @@ fn vpm_remove(module_names []string) {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn valid_final_path_of_existing_module(name string) ?string {
|
fn valid_final_path_of_existing_module(name string) ?string {
|
||||||
name_of_vmodules_folder := filepath.join(settings.vmodules_path,name.replace('.', filepath.separator))
|
name_of_vmodules_folder := os.join(settings.vmodules_path,name.replace('.', os.path_separator))
|
||||||
final_module_path := os.realpath(name_of_vmodules_folder)
|
final_module_path := os.realpath(name_of_vmodules_folder)
|
||||||
if !os.exists(final_module_path) {
|
if !os.exists(final_module_path) {
|
||||||
println('No module with name "$name" exists at $name_of_vmodules_folder')
|
println('No module with name "$name" exists at $name_of_vmodules_folder')
|
||||||
|
@ -326,7 +325,7 @@ fn vpm_help(module_names []string) {
|
||||||
fn vcs_used_in_dir(dir string) ?[]string {
|
fn vcs_used_in_dir(dir string) ?[]string {
|
||||||
mut vcs := []string
|
mut vcs := []string
|
||||||
for repo_subfolder in supported_vcs_folders {
|
for repo_subfolder in supported_vcs_folders {
|
||||||
checked_folder := os.realpath(filepath.join(dir,repo_subfolder))
|
checked_folder := os.realpath(os.join(dir,repo_subfolder))
|
||||||
if os.is_dir(checked_folder) {
|
if os.is_dir(checked_folder) {
|
||||||
vcs << repo_subfolder.replace('.', '')
|
vcs << repo_subfolder.replace('.', '')
|
||||||
}
|
}
|
||||||
|
@ -343,7 +342,7 @@ fn get_installed_modules() []string {
|
||||||
}
|
}
|
||||||
mut modules := []string
|
mut modules := []string
|
||||||
for dir in dirs {
|
for dir in dirs {
|
||||||
adir := filepath.join(settings.vmodules_path,dir)
|
adir := os.join(settings.vmodules_path,dir)
|
||||||
if dir in excluded_dirs || !os.is_dir(adir) {
|
if dir in excluded_dirs || !os.is_dir(adir) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
@ -352,7 +351,7 @@ fn get_installed_modules() []string {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
for m in mods {
|
for m in mods {
|
||||||
vcs_used_in_dir(filepath.join(adir,m)) or {
|
vcs_used_in_dir(os.join(adir,m)) or {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
modules << '${author}.$m'
|
modules << '${author}.$m'
|
||||||
|
@ -400,7 +399,7 @@ fn get_all_modules() []string {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn resolve_dependencies(name, module_path string, module_names []string) {
|
fn resolve_dependencies(name, module_path string, module_names []string) {
|
||||||
vmod_path := filepath.join(module_path,'v.mod')
|
vmod_path := os.join(module_path,'v.mod')
|
||||||
if !os.exists(vmod_path) {
|
if !os.exists(vmod_path) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,7 +9,6 @@ import (
|
||||||
term
|
term
|
||||||
readline
|
readline
|
||||||
os.cmdline
|
os.cmdline
|
||||||
filepath
|
|
||||||
)
|
)
|
||||||
|
|
||||||
struct Repl {
|
struct Repl {
|
||||||
|
@ -78,8 +77,8 @@ pub fn run_repl(workdir string, vrepl_prefix string) []string {
|
||||||
println(version)
|
println(version)
|
||||||
println('Use Ctrl-C or `exit` to exit')
|
println('Use Ctrl-C or `exit` to exit')
|
||||||
|
|
||||||
file := filepath.join( workdir, '.${vrepl_prefix}vrepl.v' )
|
file := os.join( workdir, '.${vrepl_prefix}vrepl.v' )
|
||||||
temp_file := filepath.join( workdir, '.${vrepl_prefix}vrepl_temp.v')
|
temp_file := os.join( workdir, '.${vrepl_prefix}vrepl_temp.v')
|
||||||
mut prompt := '>>> '
|
mut prompt := '>>> '
|
||||||
defer {
|
defer {
|
||||||
println('')
|
println('')
|
||||||
|
|
|
@ -2,14 +2,13 @@ module main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
os
|
os
|
||||||
filepath
|
|
||||||
v.pref
|
v.pref
|
||||||
)
|
)
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
println('V Self Compiling...')
|
println('V Self Compiling...')
|
||||||
vexe := pref.vexe_path()
|
vexe := pref.vexe_path()
|
||||||
vroot := filepath.dir(vexe)
|
vroot := os.dir(vexe)
|
||||||
os.chdir(vroot)
|
os.chdir(vroot)
|
||||||
s2 := os.exec('$vexe -o v2 cmd/v') or {
|
s2 := os.exec('$vexe -o v2 cmd/v') or {
|
||||||
panic(err)
|
panic(err)
|
||||||
|
|
|
@ -2,14 +2,13 @@ module main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
os
|
os
|
||||||
filepath
|
|
||||||
v.pref
|
v.pref
|
||||||
)
|
)
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
$if windows {
|
$if windows {
|
||||||
println('Setup freetype...')
|
println('Setup freetype...')
|
||||||
vroot := filepath.dir(pref.vexe_path())
|
vroot := os.dir(pref.vexe_path())
|
||||||
os.chdir(vroot)
|
os.chdir(vroot)
|
||||||
|
|
||||||
if os.is_dir('./thirdparty/freetype') {
|
if os.is_dir('./thirdparty/freetype') {
|
||||||
|
|
|
@ -4,7 +4,6 @@ import (
|
||||||
os
|
os
|
||||||
testing
|
testing
|
||||||
benchmark
|
benchmark
|
||||||
filepath
|
|
||||||
v.pref
|
v.pref
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -20,7 +19,7 @@ fn main() {
|
||||||
|
|
||||||
fn v_test_compiler(vargs string) {
|
fn v_test_compiler(vargs string) {
|
||||||
vexe := pref.vexe_path()
|
vexe := pref.vexe_path()
|
||||||
parent_dir := filepath.dir(vexe)
|
parent_dir := os.dir(vexe)
|
||||||
testing.vlib_should_be_present(parent_dir)
|
testing.vlib_should_be_present(parent_dir)
|
||||||
// Changing the current directory is needed for some of the compiler tests,
|
// Changing the current directory is needed for some of the compiler tests,
|
||||||
// compiler/tests/local_test.v and compiler/tests/repl/repl_test.v
|
// compiler/tests/local_test.v and compiler/tests/repl/repl_test.v
|
||||||
|
@ -53,7 +52,7 @@ fn v_test_compiler(vargs string) {
|
||||||
eprintln('')
|
eprintln('')
|
||||||
building_examples_failed := testing.v_build_failing(vargs, 'examples')
|
building_examples_failed := testing.v_build_failing(vargs, 'examples')
|
||||||
eprintln('')
|
eprintln('')
|
||||||
building_live_failed := testing.v_build_failing(vargs + '-live', filepath.join('examples','hot_reload'))
|
building_live_failed := testing.v_build_failing(vargs + '-live', os.join('examples','hot_reload'))
|
||||||
eprintln('')
|
eprintln('')
|
||||||
v_module_install_cmd := '$vexe install nedpals.args'
|
v_module_install_cmd := '$vexe install nedpals.args'
|
||||||
eprintln('')
|
eprintln('')
|
||||||
|
|
|
@ -3,7 +3,6 @@ module main
|
||||||
import (
|
import (
|
||||||
os
|
os
|
||||||
os.cmdline
|
os.cmdline
|
||||||
filepath
|
|
||||||
testing
|
testing
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -40,7 +39,7 @@ pub fn main() {
|
||||||
}
|
}
|
||||||
if os.is_dir(targ) {
|
if os.is_dir(targ) {
|
||||||
// Fetch all tests from the directory
|
// Fetch all tests from the directory
|
||||||
ts.files << os.walk_ext( targ.trim_right(filepath.separator), '_test.v')
|
ts.files << os.walk_ext( targ.trim_right(os.path_separator), '_test.v')
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
println('Unrecognized test file $targ .')
|
println('Unrecognized test file $targ .')
|
||||||
|
|
|
@ -2,13 +2,12 @@ module main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
os
|
os
|
||||||
filepath
|
|
||||||
v.pref
|
v.pref
|
||||||
)
|
)
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
println('Updating V...')
|
println('Updating V...')
|
||||||
vroot := filepath.dir(pref.vexe_path())
|
vroot := os.dir(pref.vexe_path())
|
||||||
os.chdir(vroot)
|
os.chdir(vroot)
|
||||||
// git pull
|
// git pull
|
||||||
s := os.exec('git pull --rebase origin master') or {
|
s := os.exec('git pull --rebase origin master') or {
|
||||||
|
|
|
@ -5,14 +5,13 @@ module main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
compiler
|
compiler
|
||||||
filepath
|
|
||||||
os
|
os
|
||||||
v.pref
|
v.pref
|
||||||
)
|
)
|
||||||
|
|
||||||
fn launch_tool(verbosity pref.VerboseLevel, tool_name string) {
|
fn launch_tool(verbosity pref.VerboseLevel, tool_name string) {
|
||||||
vexe := pref.vexe_path()
|
vexe := pref.vexe_path()
|
||||||
vroot := filepath.dir(vexe)
|
vroot := os.dir(vexe)
|
||||||
compiler.set_vroot_folder(vroot)
|
compiler.set_vroot_folder(vroot)
|
||||||
|
|
||||||
tool_args := os.args[1..].join(' ')
|
tool_args := os.args[1..].join(' ')
|
||||||
|
|
|
@ -7,7 +7,6 @@
|
||||||
|
|
||||||
module main
|
module main
|
||||||
|
|
||||||
import filepath
|
|
||||||
import rand
|
import rand
|
||||||
import time
|
import time
|
||||||
import os
|
import os
|
||||||
|
@ -20,7 +19,7 @@ import sdl.ttf as ttf
|
||||||
|
|
||||||
const (
|
const (
|
||||||
Title = 'tVintris'
|
Title = 'tVintris'
|
||||||
BASE = filepath.dir( os.realpath( os.executable() ) )
|
BASE = os.dir( os.realpath( os.executable() ) )
|
||||||
FontName = BASE + '/../../assets/fonts/RobotoMono-Regular.ttf'
|
FontName = BASE + '/../../assets/fonts/RobotoMono-Regular.ttf'
|
||||||
MusicName = BASE + '/sounds/TwintrisThosenine.mod'
|
MusicName = BASE + '/sounds/TwintrisThosenine.mod'
|
||||||
SndBlockName = BASE + '/sounds/block.wav'
|
SndBlockName = BASE + '/sounds/block.wav'
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
import (
|
import (
|
||||||
os
|
os
|
||||||
filepath
|
|
||||||
)
|
)
|
||||||
|
|
||||||
fn test_syscallwrappers() {
|
fn test_syscallwrappers() {
|
||||||
|
@ -8,7 +7,7 @@ fn test_syscallwrappers() {
|
||||||
$if linux {
|
$if linux {
|
||||||
$if x64 {
|
$if x64 {
|
||||||
exe := os.executable()
|
exe := os.executable()
|
||||||
vdir := filepath.dir(exe)
|
vdir := os.dir(exe)
|
||||||
if vdir.len > 1 {
|
if vdir.len > 1 {
|
||||||
dot_checks := vdir + "/.checks"
|
dot_checks := vdir + "/.checks"
|
||||||
assert os.is_dir(dot_checks)
|
assert os.is_dir(dot_checks)
|
||||||
|
|
|
@ -6,7 +6,6 @@ module compiler
|
||||||
import (
|
import (
|
||||||
os
|
os
|
||||||
strings
|
strings
|
||||||
filepath
|
|
||||||
v.pref
|
v.pref
|
||||||
// compiler.x64
|
// compiler.x64
|
||||||
time
|
time
|
||||||
|
@ -177,12 +176,12 @@ fn (v mut V) new_parser_from_file(path string) Parser {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
mut p := v.new_parser(new_scanner_file(path))
|
mut p := v.new_parser(new_scanner_file(path))
|
||||||
path_dir := os.realpath(filepath.dir(path))
|
path_dir := os.realpath(os.dir(path))
|
||||||
p = {
|
p = {
|
||||||
p |
|
p |
|
||||||
file_path:path,
|
file_path:path,
|
||||||
file_path_dir: path_dir,
|
file_path_dir: path_dir,
|
||||||
file_name:path.all_after(filepath.separator),
|
file_name:path.all_after(os.path_separator),
|
||||||
file_platform:path_platform,
|
file_platform:path_platform,
|
||||||
file_pcguard:path_pcguard,
|
file_pcguard:path_pcguard,
|
||||||
is_vh:path.ends_with('.vh'),
|
is_vh:path.ends_with('.vh'),
|
||||||
|
@ -2487,7 +2486,7 @@ struct IndexConfig {
|
||||||
|
|
||||||
// for debugging only
|
// for debugging only
|
||||||
fn (p &Parser) fileis(s string) bool {
|
fn (p &Parser) fileis(s string) bool {
|
||||||
return filepath.filename(p.scanner.file_path).contains(s)
|
return os.filename(p.scanner.file_path).contains(s)
|
||||||
}
|
}
|
||||||
|
|
||||||
// in and dot have higher priority than `!`
|
// in and dot have higher priority than `!`
|
||||||
|
|
|
@ -6,7 +6,6 @@ module compiler
|
||||||
import (
|
import (
|
||||||
os
|
os
|
||||||
time
|
time
|
||||||
filepath
|
|
||||||
v.pref
|
v.pref
|
||||||
term
|
term
|
||||||
)
|
)
|
||||||
|
@ -32,7 +31,7 @@ fn (v mut V) cc() {
|
||||||
}
|
}
|
||||||
v.build_thirdparty_obj_files()
|
v.build_thirdparty_obj_files()
|
||||||
vexe := pref.vexe_path()
|
vexe := pref.vexe_path()
|
||||||
vdir := filepath.dir(vexe)
|
vdir := os.dir(vexe)
|
||||||
// Just create a C/JavaScript file and exit
|
// Just create a C/JavaScript file and exit
|
||||||
// for example: `v -o v.c compiler`
|
// for example: `v -o v.c compiler`
|
||||||
ends_with_c := v.pref.out_name.ends_with('.c')
|
ends_with_c := v.pref.out_name.ends_with('.c')
|
||||||
|
@ -153,8 +152,8 @@ fn (v mut V) cc() {
|
||||||
}
|
}
|
||||||
if v.pref.build_mode == .build_module {
|
if v.pref.build_mode == .build_module {
|
||||||
// Create the modules & out directory if it's not there.
|
// Create the modules & out directory if it's not there.
|
||||||
mut out_dir := if v.pref.path.starts_with('vlib') { '$v_modules_path${filepath.separator}cache${filepath.separator}$v.pref.path' } else { '$v_modules_path${filepath.separator}$v.pref.path' }
|
mut out_dir := if v.pref.path.starts_with('vlib') { '$v_modules_path${os.path_separator}cache${os.path_separator}$v.pref.path' } else { '$v_modules_path${os.path_separator}$v.pref.path' }
|
||||||
pdir := out_dir.all_before_last(filepath.separator)
|
pdir := out_dir.all_before_last(os.path_separator)
|
||||||
if !os.is_dir(pdir) {
|
if !os.is_dir(pdir) {
|
||||||
os.mkdir_all(pdir)
|
os.mkdir_all(pdir)
|
||||||
}
|
}
|
||||||
|
@ -220,14 +219,14 @@ fn (v mut V) cc() {
|
||||||
a << '-c'
|
a << '-c'
|
||||||
}
|
}
|
||||||
else if v.pref.is_cache {
|
else if v.pref.is_cache {
|
||||||
builtin_o_path := filepath.join(v_modules_path,'cache','vlib','builtin.o')
|
builtin_o_path := os.join(v_modules_path,'cache','vlib','builtin.o')
|
||||||
a << builtin_o_path.replace('builtin.o', 'strconv.o') // TODO hack no idea why this is needed
|
a << builtin_o_path.replace('builtin.o', 'strconv.o') // TODO hack no idea why this is needed
|
||||||
if os.exists(builtin_o_path) {
|
if os.exists(builtin_o_path) {
|
||||||
libs = builtin_o_path
|
libs = builtin_o_path
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
println('$builtin_o_path not found... building module builtin')
|
println('$builtin_o_path not found... building module builtin')
|
||||||
os.system('$vexe build module vlib${filepath.separator}builtin')
|
os.system('$vexe build module vlib${os.path_separator}builtin')
|
||||||
}
|
}
|
||||||
for imp in v.table.imports {
|
for imp in v.table.imports {
|
||||||
if imp.contains('vweb') {
|
if imp.contains('vweb') {
|
||||||
|
@ -236,8 +235,8 @@ fn (v mut V) cc() {
|
||||||
if imp == 'webview' {
|
if imp == 'webview' {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
imp_path := imp.replace('.', filepath.separator)
|
imp_path := imp.replace('.', os.path_separator)
|
||||||
path := '$v_modules_path${filepath.separator}cache${filepath.separator}vlib${filepath.separator}${imp_path}.o'
|
path := '$v_modules_path${os.path_separator}cache${os.path_separator}vlib${os.path_separator}${imp_path}.o'
|
||||||
// println('adding ${imp_path}.o')
|
// println('adding ${imp_path}.o')
|
||||||
if os.exists(path) {
|
if os.exists(path) {
|
||||||
libs += ' ' + path
|
libs += ' ' + path
|
||||||
|
@ -254,7 +253,7 @@ fn (v mut V) cc() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
os.system('$vexe build module vlib${filepath.separator}$imp_path')
|
os.system('$vexe build module vlib${os.path_separator}$imp_path')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if path.ends_with('vlib/ui.o') {
|
if path.ends_with('vlib/ui.o') {
|
||||||
|
|
|
@ -6,7 +6,6 @@ module compiler
|
||||||
import (
|
import (
|
||||||
os
|
os
|
||||||
strings
|
strings
|
||||||
filepath
|
|
||||||
)
|
)
|
||||||
|
|
||||||
struct CGen {
|
struct CGen {
|
||||||
|
@ -278,14 +277,14 @@ fn (v &V) build_thirdparty_obj_file(path string, moduleflags []CFlag) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
println('$obj_path not found, building it...')
|
println('$obj_path not found, building it...')
|
||||||
parent := filepath.dir(obj_path)
|
parent := os.dir(obj_path)
|
||||||
files := os.ls(parent)or{
|
files := os.ls(parent)or{
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
mut cfiles := ''
|
mut cfiles := ''
|
||||||
for file in files {
|
for file in files {
|
||||||
if file.ends_with('.c') {
|
if file.ends_with('.c') {
|
||||||
cfiles += '"' + os.realpath(parent + filepath.separator + file) + '" '
|
cfiles += '"' + os.realpath(parent + os.path_separator + file) + '" '
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
btarget := moduleflags.c_options_before_target()
|
btarget := moduleflags.c_options_before_target()
|
||||||
|
|
|
@ -2,7 +2,6 @@ module compiler
|
||||||
|
|
||||||
import (
|
import (
|
||||||
os
|
os
|
||||||
filepath
|
|
||||||
term
|
term
|
||||||
)
|
)
|
||||||
// ////////////////////////////////////////////////////////////////////////////////////////////////
|
// ////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -157,7 +156,7 @@ fn (s &Scanner) get_error_filepath() string {
|
||||||
else {
|
else {
|
||||||
s.print_rel_paths_on_error}}
|
s.print_rel_paths_on_error}}
|
||||||
if use_relative_paths {
|
if use_relative_paths {
|
||||||
workdir := os.getwd() + filepath.separator
|
workdir := os.getwd() + os.path_separator
|
||||||
if s.file_path.starts_with(workdir) {
|
if s.file_path.starts_with(workdir) {
|
||||||
return s.file_path.replace(workdir, '')
|
return s.file_path.replace(workdir, '')
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,7 +7,6 @@ import (
|
||||||
vweb.tmpl // for `$vweb_html()`
|
vweb.tmpl // for `$vweb_html()`
|
||||||
os
|
os
|
||||||
strings
|
strings
|
||||||
filepath
|
|
||||||
)
|
)
|
||||||
|
|
||||||
fn (p mut Parser) comp_time() {
|
fn (p mut Parser) comp_time() {
|
||||||
|
@ -198,7 +197,7 @@ fn (p mut Parser) comp_time() {
|
||||||
// Can't find the template file in current directory,
|
// Can't find the template file in current directory,
|
||||||
// try looking next to the vweb program, in case it's run with
|
// try looking next to the vweb program, in case it's run with
|
||||||
// v path/to/vweb_app.v
|
// v path/to/vweb_app.v
|
||||||
path = filepath.dir(p.scanner.file_path) + '/' + path
|
path = os.dir(p.scanner.file_path) + '/' + path
|
||||||
if !os.exists(path) {
|
if !os.exists(path) {
|
||||||
p.error('vweb HTML template "$path" not found')
|
p.error('vweb HTML template "$path" not found')
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
module compiler
|
module compiler
|
||||||
// import filepath
|
// import os
|
||||||
// import compiler.x64
|
// import compiler.x64
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,6 @@ module compiler
|
||||||
import (
|
import (
|
||||||
os
|
os
|
||||||
time
|
time
|
||||||
filepath
|
|
||||||
)
|
)
|
||||||
|
|
||||||
fn (v &V) generate_hotcode_reloading_compiler_flags() []string {
|
fn (v &V) generate_hotcode_reloading_compiler_flags() []string {
|
||||||
|
@ -55,7 +54,7 @@ fn (v &V) generate_hotcode_reloading_main_caller() {
|
||||||
// We are in live code reload mode, so start the .so loader in the background
|
// We are in live code reload mode, so start the .so loader in the background
|
||||||
mut cgen := v.cgen
|
mut cgen := v.cgen
|
||||||
cgen.genln('')
|
cgen.genln('')
|
||||||
file_base := filepath.filename(v.pref.path).replace('.v', '')
|
file_base := os.filename(v.pref.path).replace('.v', '')
|
||||||
if v.pref.os != .windows {
|
if v.pref.os != .windows {
|
||||||
// unix:
|
// unix:
|
||||||
so_name := file_base + '.so'
|
so_name := file_base + '.so'
|
||||||
|
@ -80,7 +79,7 @@ fn (v &V) generate_hot_reload_code() {
|
||||||
// Hot code reloading
|
// Hot code reloading
|
||||||
if v.pref.is_live {
|
if v.pref.is_live {
|
||||||
mut file := os.realpath(v.pref.path)
|
mut file := os.realpath(v.pref.path)
|
||||||
file_base := filepath.filename(file).replace('.v', '')
|
file_base := os.filename(file).replace('.v', '')
|
||||||
so_name := file_base + '.so'
|
so_name := file_base + '.so'
|
||||||
// Need to build .so file before building the live application
|
// Need to build .so file before building the live application
|
||||||
// The live app needs to load this .so file on initialization.
|
// The live app needs to load this .so file on initialization.
|
||||||
|
@ -225,4 +224,3 @@ void reload_so() {
|
||||||
cgen.genln(' int load_so(byteptr path) { return 0; }')
|
cgen.genln(' int load_so(byteptr path) { return 0; }')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,6 @@ module compiler
|
||||||
import (
|
import (
|
||||||
os
|
os
|
||||||
strings
|
strings
|
||||||
filepath
|
|
||||||
v.pref
|
v.pref
|
||||||
v.builder
|
v.builder
|
||||||
)
|
)
|
||||||
|
@ -66,11 +65,11 @@ pub fn new_v(pref &pref.Preferences) &V {
|
||||||
|
|
||||||
mut vgen_buf := strings.new_builder(1000)
|
mut vgen_buf := strings.new_builder(1000)
|
||||||
vgen_buf.writeln('module vgen\nimport strings')
|
vgen_buf.writeln('module vgen\nimport strings')
|
||||||
compiled_dir:=if os.is_dir(rdir) { rdir } else { filepath.dir(rdir) }
|
compiled_dir:=if os.is_dir(rdir) { rdir } else { os.dir(rdir) }
|
||||||
|
|
||||||
return &V{
|
return &V{
|
||||||
mod_file_cacher: new_mod_file_cacher()
|
mod_file_cacher: new_mod_file_cacher()
|
||||||
compiled_dir:compiled_dir// if os.is_dir(rdir) { rdir } else { filepath.dir(rdir) }
|
compiled_dir:compiled_dir// if os.is_dir(rdir) { rdir } else { os.dir(rdir) }
|
||||||
table: new_table(pref.obfuscate)
|
table: new_table(pref.obfuscate)
|
||||||
out_name_c: out_name_c
|
out_name_c: out_name_c
|
||||||
cgen: new_cgen(out_name_c)
|
cgen: new_cgen(out_name_c)
|
||||||
|
@ -106,13 +105,13 @@ pub fn (v &V) finalize_compilation() {
|
||||||
pub fn (v mut V) add_parser(parser Parser) int {
|
pub fn (v mut V) add_parser(parser Parser) int {
|
||||||
pidx := v.parsers.len
|
pidx := v.parsers.len
|
||||||
v.parsers << parser
|
v.parsers << parser
|
||||||
file_path := if filepath.is_abs(parser.file_path) { parser.file_path } else { os.realpath(parser.file_path) }
|
file_path := if os.is_abs(parser.file_path) { parser.file_path } else { os.realpath(parser.file_path) }
|
||||||
v.file_parser_idx[file_path] = pidx
|
v.file_parser_idx[file_path] = pidx
|
||||||
return pidx
|
return pidx
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn (v &V) get_file_parser_index(file string) ?int {
|
pub fn (v &V) get_file_parser_index(file string) ?int {
|
||||||
file_path := if filepath.is_abs(file) { file } else { os.realpath(file) }
|
file_path := if os.is_abs(file) { file } else { os.realpath(file) }
|
||||||
if file_path in v.file_parser_idx {
|
if file_path in v.file_parser_idx {
|
||||||
return v.file_parser_idx[file_path]
|
return v.file_parser_idx[file_path]
|
||||||
}
|
}
|
||||||
|
@ -349,7 +348,7 @@ pub fn (v mut V) compile_x64() {
|
||||||
println('v -x64 can only generate Linux binaries for now')
|
println('v -x64 can only generate Linux binaries for now')
|
||||||
println('You are not on a Linux system, so you will not ' + 'be able to run the resulting executable')
|
println('You are not on a Linux system, so you will not ' + 'be able to run the resulting executable')
|
||||||
}
|
}
|
||||||
//v.files << v.v_files_from_dir(filepath.join(v.pref.vlib_path,'builtin','bare'))
|
//v.files << v.v_files_from_dir(os.join(v.pref.vlib_path,'builtin','bare'))
|
||||||
v.files << v.pref.path
|
v.files << v.pref.path
|
||||||
v.set_module_lookup_paths()
|
v.set_module_lookup_paths()
|
||||||
mut b := v.new_v2()
|
mut b := v.new_v2()
|
||||||
|
@ -625,7 +624,7 @@ pub fn (v &V) v_files_from_dir(dir string) []string {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
res << filepath.join(dir,file)
|
res << os.join(dir,file)
|
||||||
}
|
}
|
||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
@ -639,7 +638,7 @@ pub fn (v mut V) add_v_files_to_compile() {
|
||||||
}
|
}
|
||||||
// Builtin cache exists? Use it.
|
// Builtin cache exists? Use it.
|
||||||
if v.pref.is_cache {
|
if v.pref.is_cache {
|
||||||
builtin_vh := filepath.join(v_modules_path,'vlib','builtin.vh')
|
builtin_vh := os.join(v_modules_path,'vlib','builtin.vh')
|
||||||
if os.exists(builtin_vh) {
|
if os.exists(builtin_vh) {
|
||||||
v.cached_mods << 'builtin'
|
v.cached_mods << 'builtin'
|
||||||
builtin_files = [builtin_vh]
|
builtin_files = [builtin_vh]
|
||||||
|
@ -690,8 +689,8 @@ pub fn (v mut V) add_v_files_to_compile() {
|
||||||
// Cached modules are broken currently
|
// Cached modules are broken currently
|
||||||
/*
|
/*
|
||||||
if v.pref.vpath != '' && v.pref.build_mode != .build_module && !mod.contains('vweb') {
|
if v.pref.vpath != '' && v.pref.build_mode != .build_module && !mod.contains('vweb') {
|
||||||
mod_path := mod.replace('.', filepath.separator)
|
mod_path := mod.replace('.', os.path_separator)
|
||||||
vh_path := '$v_modules_path${filepath.separator}vlib${filepath.separator}${mod_path}.vh'
|
vh_path := '$v_modules_path${os.path_separator}vlib${os.path_separator}${mod_path}.vh'
|
||||||
if v.pref.is_cache && os.exists(vh_path) {
|
if v.pref.is_cache && os.exists(vh_path) {
|
||||||
eprintln('using cached module `$mod`: $vh_path')
|
eprintln('using cached module `$mod`: $vh_path')
|
||||||
v.cached_mods << mod
|
v.cached_mods << mod
|
||||||
|
@ -722,16 +721,16 @@ pub fn (v &V) get_builtin_files() []string {
|
||||||
// Lookup for built-in folder in lookup path.
|
// Lookup for built-in folder in lookup path.
|
||||||
// Assumption: `builtin/` folder implies usable implementation of builtin
|
// Assumption: `builtin/` folder implies usable implementation of builtin
|
||||||
for location in v.pref.lookup_path {
|
for location in v.pref.lookup_path {
|
||||||
if !os.exists(filepath.join(location, 'builtin')) {
|
if !os.exists(os.join(location, 'builtin')) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if v.pref.is_bare {
|
if v.pref.is_bare {
|
||||||
return v.v_files_from_dir(filepath.join(location, 'builtin', 'bare'))
|
return v.v_files_from_dir(os.join(location, 'builtin', 'bare'))
|
||||||
}
|
}
|
||||||
$if js {
|
$if js {
|
||||||
return v.v_files_from_dir(filepath.join(location, 'builtin','js'))
|
return v.v_files_from_dir(os.join(location, 'builtin','js'))
|
||||||
}
|
}
|
||||||
return v.v_files_from_dir(filepath.join(location, 'builtin'))
|
return v.v_files_from_dir(os.join(location, 'builtin'))
|
||||||
}
|
}
|
||||||
// Panic. We couldn't find the folder.
|
// Panic. We couldn't find the folder.
|
||||||
verror('`builtin/` not included on module lookup path.
|
verror('`builtin/` not included on module lookup path.
|
||||||
|
@ -748,19 +747,19 @@ pub fn (v &V) get_user_files() []string {
|
||||||
mut user_files := []string
|
mut user_files := []string
|
||||||
|
|
||||||
// See cmd/tools/preludes/README.md for more info about what preludes are
|
// See cmd/tools/preludes/README.md for more info about what preludes are
|
||||||
vroot := filepath.dir(pref.vexe_path())
|
vroot := os.dir(pref.vexe_path())
|
||||||
preludes_path := filepath.join(vroot,'cmd','tools','preludes')
|
preludes_path := os.join(vroot,'cmd','tools','preludes')
|
||||||
if v.pref.is_live {
|
if v.pref.is_live {
|
||||||
user_files << filepath.join(preludes_path,'live_main.v')
|
user_files << os.join(preludes_path,'live_main.v')
|
||||||
}
|
}
|
||||||
if v.pref.is_solive {
|
if v.pref.is_solive {
|
||||||
user_files << filepath.join(preludes_path,'live_shared.v')
|
user_files << os.join(preludes_path,'live_shared.v')
|
||||||
}
|
}
|
||||||
if v.pref.is_test {
|
if v.pref.is_test {
|
||||||
user_files << filepath.join(preludes_path,'tests_assertions.v')
|
user_files << os.join(preludes_path,'tests_assertions.v')
|
||||||
}
|
}
|
||||||
if v.pref.is_test && v.pref.is_stats {
|
if v.pref.is_test && v.pref.is_stats {
|
||||||
user_files << filepath.join(preludes_path,'tests_with_stats.v')
|
user_files << os.join(preludes_path,'tests_with_stats.v')
|
||||||
}
|
}
|
||||||
|
|
||||||
is_test := dir.ends_with('_test.v')
|
is_test := dir.ends_with('_test.v')
|
||||||
|
@ -781,7 +780,7 @@ pub fn (v &V) get_user_files() []string {
|
||||||
v.log('> That brings in all other ordinary .v files in the same module too .')
|
v.log('> That brings in all other ordinary .v files in the same module too .')
|
||||||
}
|
}
|
||||||
user_files << single_test_v_file
|
user_files << single_test_v_file
|
||||||
dir = filepath.basedir(single_test_v_file)
|
dir = os.basedir(single_test_v_file)
|
||||||
}
|
}
|
||||||
if dir.ends_with('.v') || dir.ends_with('.vsh') {
|
if dir.ends_with('.v') || dir.ends_with('.vsh') {
|
||||||
single_v_file := dir
|
single_v_file := dir
|
||||||
|
@ -934,5 +933,5 @@ pub fn set_vroot_folder(vroot_path string) {
|
||||||
// VEXE env variable is needed so that compiler.vexe_path()
|
// VEXE env variable is needed so that compiler.vexe_path()
|
||||||
// can return it later to whoever needs it:
|
// can return it later to whoever needs it:
|
||||||
vname := if os.user_os() == 'windows' { 'v.exe' } else { 'v' }
|
vname := if os.user_os() == 'windows' { 'v.exe' } else { 'v' }
|
||||||
os.setenv('VEXE', os.realpath([vroot_path, vname].join(filepath.separator)), true)
|
os.setenv('VEXE', os.realpath([vroot_path, vname].join(os.path_separator)), true)
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,7 +6,6 @@ module compiler
|
||||||
import (
|
import (
|
||||||
strings
|
strings
|
||||||
os
|
os
|
||||||
filepath
|
|
||||||
v.pref
|
v.pref
|
||||||
)
|
)
|
||||||
/*
|
/*
|
||||||
|
@ -29,10 +28,10 @@ mut:
|
||||||
fn generate_vh(mod string) {
|
fn generate_vh(mod string) {
|
||||||
println('\n\n\n\nGenerating a V header file for module `$mod`')
|
println('\n\n\n\nGenerating a V header file for module `$mod`')
|
||||||
vexe := pref.vexe_path()
|
vexe := pref.vexe_path()
|
||||||
full_mod_path := filepath.join(filepath.dir(vexe),mod)
|
full_mod_path := os.join(os.dir(vexe),mod)
|
||||||
dir := if mod.starts_with('vlib') { '$compiler.v_modules_path${filepath.separator}$mod' } else { mod }
|
dir := if mod.starts_with('vlib') { '$compiler.v_modules_path${os.path_separator}$mod' } else { mod }
|
||||||
path := dir + '.vh'
|
path := dir + '.vh'
|
||||||
pdir := dir.all_before_last(filepath.separator)
|
pdir := dir.all_before_last(os.path_separator)
|
||||||
if !os.is_dir(pdir) {
|
if !os.is_dir(pdir) {
|
||||||
os.mkdir_all(pdir)
|
os.mkdir_all(pdir)
|
||||||
// os.mkdir(os.realpath(dir)) or { panic(err) }
|
// os.mkdir(os.realpath(dir)) or { panic(err) }
|
||||||
|
@ -50,7 +49,7 @@ fn generate_vh(mod string) {
|
||||||
// mut vfiles := os.ls(full_mod_path) or {
|
// mut vfiles := os.ls(full_mod_path) or {
|
||||||
// exit(1)
|
// exit(1)
|
||||||
// }
|
// }
|
||||||
filtered := vfiles.filter(it.ends_with('.v') && !it.ends_with('test.v') && !it.ends_with('_windows.v') && !it.ends_with('_win.v') && !it.ends_with('_lin.v') && !it.contains('${filepath.separator}examples') && !it.contains('_js.v') && !it.contains('_bare.v') && !it.contains('${filepath.separator}js')) // TODO merge once filter allows it
|
filtered := vfiles.filter(it.ends_with('.v') && !it.ends_with('test.v') && !it.ends_with('_windows.v') && !it.ends_with('_win.v') && !it.ends_with('_lin.v') && !it.contains('${os.path_separator}examples') && !it.contains('_js.v') && !it.contains('_bare.v') && !it.contains('${os.path_separator}js')) // TODO merge once filter allows it
|
||||||
// println('f:')
|
// println('f:')
|
||||||
// println(filtered)
|
// println(filtered)
|
||||||
mut pref := &pref.Preferences {
|
mut pref := &pref.Preferences {
|
||||||
|
|
|
@ -4,7 +4,6 @@
|
||||||
module compiler
|
module compiler
|
||||||
|
|
||||||
import (
|
import (
|
||||||
filepath
|
|
||||||
os
|
os
|
||||||
v.pref
|
v.pref
|
||||||
)
|
)
|
||||||
|
@ -25,7 +24,7 @@ fn (table &Table) qualify_module(mod string, file_path string) string {
|
||||||
for m in table.imports {
|
for m in table.imports {
|
||||||
if m.contains('.') && m.contains(mod) {
|
if m.contains('.') && m.contains(mod) {
|
||||||
m_parts := m.split('.')
|
m_parts := m.split('.')
|
||||||
m_path := m_parts.join(filepath.separator)
|
m_path := m_parts.join(os.path_separator)
|
||||||
if mod == m_parts[m_parts.len - 1] && file_path.contains(m_path) {
|
if mod == m_parts[m_parts.len - 1] && file_path.contains(m_path) {
|
||||||
return m
|
return m
|
||||||
}
|
}
|
||||||
|
@ -147,7 +146,7 @@ pub fn (graph &DepGraph) imports() []string {
|
||||||
[inline]
|
[inline]
|
||||||
fn (v &V) module_path(mod string) string {
|
fn (v &V) module_path(mod string) string {
|
||||||
// submodule support
|
// submodule support
|
||||||
return mod.replace('.', filepath.separator)
|
return mod.replace('.', os.path_separator)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 'strings' => 'VROOT/vlib/strings'
|
// 'strings' => 'VROOT/vlib/strings'
|
||||||
|
@ -168,10 +167,10 @@ fn (v mut V) set_module_lookup_paths() {
|
||||||
// 3.2) search in ~/.vmodules/ (i.e. modules installed with vpm)
|
// 3.2) search in ~/.vmodules/ (i.e. modules installed with vpm)
|
||||||
v.module_lookup_paths = []
|
v.module_lookup_paths = []
|
||||||
if v.pref.is_test {
|
if v.pref.is_test {
|
||||||
v.module_lookup_paths << filepath.basedir(v.compiled_dir) // pdir of _test.v
|
v.module_lookup_paths << os.basedir(v.compiled_dir) // pdir of _test.v
|
||||||
}
|
}
|
||||||
v.module_lookup_paths << v.compiled_dir
|
v.module_lookup_paths << v.compiled_dir
|
||||||
v.module_lookup_paths << filepath.join(v.compiled_dir,'modules')
|
v.module_lookup_paths << os.join(v.compiled_dir,'modules')
|
||||||
v.module_lookup_paths << v.pref.lookup_path
|
v.module_lookup_paths << v.pref.lookup_path
|
||||||
if v.pref.verbosity.is_higher_or_equal(.level_two) {
|
if v.pref.verbosity.is_higher_or_equal(.level_two) {
|
||||||
v.log('v.module_lookup_paths: $v.module_lookup_paths')
|
v.log('v.module_lookup_paths: $v.module_lookup_paths')
|
||||||
|
@ -190,7 +189,7 @@ fn (p mut Parser) find_module_path(mod string) ?string {
|
||||||
|
|
||||||
mod_path := p.v.module_path(mod)
|
mod_path := p.v.module_path(mod)
|
||||||
for lookup_path in module_lookup_paths {
|
for lookup_path in module_lookup_paths {
|
||||||
try_path := filepath.join(lookup_path,mod_path)
|
try_path := os.join(lookup_path,mod_path)
|
||||||
if p.v.pref.verbosity.is_higher_or_equal(.level_three) {
|
if p.v.pref.verbosity.is_higher_or_equal(.level_three) {
|
||||||
println(' >> trying to find $mod in $try_path ...')
|
println(' >> trying to find $mod in $try_path ...')
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,9 +1,6 @@
|
||||||
module compiler
|
module compiler
|
||||||
|
|
||||||
import (
|
import os
|
||||||
os
|
|
||||||
filepath
|
|
||||||
)
|
|
||||||
|
|
||||||
#flag windows -l shell32
|
#flag windows -l shell32
|
||||||
#flag windows -l dbghelp
|
#flag windows -l dbghelp
|
||||||
|
@ -165,7 +162,7 @@ fn find_msvc() ?MsvcResult {
|
||||||
return error('Unable to find visual studio')
|
return error('Unable to find visual studio')
|
||||||
}
|
}
|
||||||
return MsvcResult{
|
return MsvcResult{
|
||||||
full_cl_exe_path: os.realpath(vs.exe_path + filepath.separator + 'cl.exe')
|
full_cl_exe_path: os.realpath(vs.exe_path + os.path_separator + 'cl.exe')
|
||||||
exe_path: vs.exe_path
|
exe_path: vs.exe_path
|
||||||
um_lib_path: wk.um_lib_path
|
um_lib_path: wk.um_lib_path
|
||||||
ucrt_lib_path: wk.ucrt_lib_path
|
ucrt_lib_path: wk.ucrt_lib_path
|
||||||
|
@ -316,14 +313,14 @@ fn build_thirdparty_obj_file_with_msvc(path string, moduleflags []CFlag) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
println('$obj_path not found, building it (with msvc)...')
|
println('$obj_path not found, building it (with msvc)...')
|
||||||
parent := filepath.dir(obj_path)
|
parent := os.dir(obj_path)
|
||||||
files := os.ls(parent)or{
|
files := os.ls(parent)or{
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
mut cfiles := ''
|
mut cfiles := ''
|
||||||
for file in files {
|
for file in files {
|
||||||
if file.ends_with('.c') {
|
if file.ends_with('.c') {
|
||||||
cfiles += '"' + os.realpath(parent + filepath.separator + file) + '" '
|
cfiles += '"' + os.realpath(parent + os.path_separator + file) + '" '
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
include_string := '-I "$msvc.ucrt_include_path" -I "$msvc.vs_include_path" -I "$msvc.um_include_path" -I "$msvc.shared_include_path"'
|
include_string := '-I "$msvc.ucrt_include_path" -I "$msvc.vs_include_path" -I "$msvc.um_include_path" -I "$msvc.shared_include_path"'
|
||||||
|
@ -378,7 +375,7 @@ fn (cflags []CFlag) msvc_string_flags() MsvcStringFlags {
|
||||||
}
|
}
|
||||||
else if flag.name == '-L' {
|
else if flag.name == '-L' {
|
||||||
lib_paths << flag.value
|
lib_paths << flag.value
|
||||||
lib_paths << flag.value + filepath.separator + 'msvc'
|
lib_paths << flag.value + os.path_separator + 'msvc'
|
||||||
// The above allows putting msvc specific .lib files in a subfolder msvc/ ,
|
// The above allows putting msvc specific .lib files in a subfolder msvc/ ,
|
||||||
// where gcc will NOT find them, but cl will do...
|
// where gcc will NOT find them, but cl will do...
|
||||||
// NB: gcc is smart enough to not need .lib files at all in most cases, the .dll is enough.
|
// NB: gcc is smart enough to not need .lib files at all in most cases, the .dll is enough.
|
||||||
|
|
|
@ -3,11 +3,7 @@
|
||||||
// that can be found in the LICENSE file.
|
// that can be found in the LICENSE file.
|
||||||
module compiler
|
module compiler
|
||||||
|
|
||||||
import (
|
import os
|
||||||
os
|
|
||||||
filepath
|
|
||||||
// strings
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
const (
|
||||||
single_quote = `\'`
|
single_quote = `\'`
|
||||||
|
@ -919,7 +915,7 @@ fn (s mut Scanner) debug_tokens() {
|
||||||
s.pos = 0
|
s.pos = 0
|
||||||
s.started = false
|
s.started = false
|
||||||
s.debug = true
|
s.debug = true
|
||||||
fname := s.file_path.all_after(filepath.separator)
|
fname := s.file_path.all_after(os.path_separator)
|
||||||
println('\n===DEBUG TOKENS $fname===')
|
println('\n===DEBUG TOKENS $fname===')
|
||||||
for {
|
for {
|
||||||
res := s.scan()
|
res := s.scan()
|
||||||
|
|
|
@ -4,7 +4,6 @@ import os
|
||||||
import compiler.tests.repl.runner
|
import compiler.tests.repl.runner
|
||||||
import benchmark
|
import benchmark
|
||||||
import sync
|
import sync
|
||||||
import filepath
|
|
||||||
|
|
||||||
fn test_the_v_compiler_can_be_invoked() {
|
fn test_the_v_compiler_can_be_invoked() {
|
||||||
vexec := runner.full_path_to_v(5)
|
vexec := runner.full_path_to_v(5)
|
||||||
|
@ -64,7 +63,7 @@ fn worker_repl(p mut sync.PoolProcessor, idx int, thread_id int) voidptr {
|
||||||
p.set_thread_context(idx, tls_bench)
|
p.set_thread_context(idx, tls_bench)
|
||||||
}
|
}
|
||||||
tls_bench.cstep = idx
|
tls_bench.cstep = idx
|
||||||
tfolder := filepath.join(cdir,'vrepl_tests_$idx')
|
tfolder := os.join(cdir,'vrepl_tests_$idx')
|
||||||
if os.is_dir(tfolder) {
|
if os.is_dir(tfolder) {
|
||||||
os.rmdir_all(tfolder)
|
os.rmdir_all(tfolder)
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,9 +1,6 @@
|
||||||
module runner
|
module runner
|
||||||
|
|
||||||
import (
|
import os
|
||||||
os
|
|
||||||
filepath
|
|
||||||
)
|
|
||||||
|
|
||||||
pub struct RunnerOptions {
|
pub struct RunnerOptions {
|
||||||
pub:
|
pub:
|
||||||
|
@ -20,9 +17,9 @@ pub fn full_path_to_v(dirs_in int) string {
|
||||||
vname := if os.user_os() == 'windows' { 'v.exe' } else { 'v' }
|
vname := if os.user_os() == 'windows' { 'v.exe' } else { 'v' }
|
||||||
mut path := os.executable()
|
mut path := os.executable()
|
||||||
for i := 0; i < dirs_in; i++ {
|
for i := 0; i < dirs_in; i++ {
|
||||||
path = filepath.dir(path)
|
path = os.dir(path)
|
||||||
}
|
}
|
||||||
vexec := filepath.join( path, vname )
|
vexec := os.join( path, vname )
|
||||||
/*
|
/*
|
||||||
args := os.args
|
args := os.args
|
||||||
vreal := os.realpath('v')
|
vreal := os.realpath('v')
|
||||||
|
@ -51,17 +48,17 @@ fn diff_files( file_result, file_expected string ) string {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn run_repl_file(wd string, vexec string, file string) ?string {
|
pub fn run_repl_file(wd string, vexec string, file string) ?string {
|
||||||
vexec_folder := filepath.dir(vexec) + filepath.separator
|
vexec_folder := os.dir(vexec) + os.path_separator
|
||||||
fcontent := os.read_file(file) or { return error('Could not read file ${file}') }
|
fcontent := os.read_file(file) or { return error('Could not read file ${file}') }
|
||||||
content := fcontent.replace('\r', '')
|
content := fcontent.replace('\r', '')
|
||||||
input := content.all_before('===output===\n')
|
input := content.all_before('===output===\n')
|
||||||
output := content.all_after('===output===\n')
|
output := content.all_after('===output===\n')
|
||||||
|
|
||||||
fname := filepath.filename( file )
|
fname := os.filename( file )
|
||||||
|
|
||||||
input_temporary_filename := os.realpath(filepath.join( wd, 'input_temporary_filename.txt'))
|
input_temporary_filename := os.realpath(os.join( wd, 'input_temporary_filename.txt'))
|
||||||
os.write_file(input_temporary_filename, input)
|
os.write_file(input_temporary_filename, input)
|
||||||
os.write_file( os.realpath(filepath.join( wd, 'original.txt' ) ), fcontent )
|
os.write_file( os.realpath(os.join( wd, 'original.txt' ) ), fcontent )
|
||||||
rcmd := '"$vexec" repl -replfolder "$wd" -replprefix "${fname}." < $input_temporary_filename'
|
rcmd := '"$vexec" repl -replfolder "$wd" -replprefix "${fname}." < $input_temporary_filename'
|
||||||
r := os.exec(rcmd) or {
|
r := os.exec(rcmd) or {
|
||||||
os.rm(input_temporary_filename)
|
os.rm(input_temporary_filename)
|
||||||
|
@ -74,7 +71,7 @@ pub fn run_repl_file(wd string, vexec string, file string) ?string {
|
||||||
.replace('>>>', '')
|
.replace('>>>', '')
|
||||||
.replace('... ', '')
|
.replace('... ', '')
|
||||||
.all_after('Use Ctrl-C or `exit` to exit\n')
|
.all_after('Use Ctrl-C or `exit` to exit\n')
|
||||||
.replace(wd + filepath.separator, '' )
|
.replace(wd + os.path_separator, '' )
|
||||||
.replace(vexec_folder, '')
|
.replace(vexec_folder, '')
|
||||||
.replace('\\', '/')
|
.replace('\\', '/')
|
||||||
|
|
||||||
|
@ -137,7 +134,7 @@ pub fn new_options() RunnerOptions {
|
||||||
if os.args.len > 1 {
|
if os.args.len > 1 {
|
||||||
files = os.args[1..]
|
files = os.args[1..]
|
||||||
} else {
|
} else {
|
||||||
os.chdir( filepath.dir(vexec) )
|
os.chdir( os.dir(vexec) )
|
||||||
wd = os.getwd()
|
wd = os.getwd()
|
||||||
files = os.walk_ext('.', '.repl')
|
files = os.walk_ext('.', '.repl')
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
module compiler
|
module compiler
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import filepath
|
|
||||||
|
|
||||||
|
|
||||||
// This file provides a caching mechanism for seeking quickly whether a
|
// This file provides a caching mechanism for seeking quickly whether a
|
||||||
|
@ -98,13 +97,13 @@ fn (mcache mut ModFileCacher) traverse(mfolder string) ([]string, ModFileAndFold
|
||||||
if 'v.mod' in files {
|
if 'v.mod' in files {
|
||||||
// TODO: actually read the v.mod file and parse its contents to see
|
// TODO: actually read the v.mod file and parse its contents to see
|
||||||
// if its source folder is different
|
// if its source folder is different
|
||||||
res := ModFileAndFolder{ vmod_file: filepath.join( cfolder, 'v.mod'), vmod_folder: cfolder }
|
res := ModFileAndFolder{ vmod_file: os.join( cfolder, 'v.mod'), vmod_folder: cfolder }
|
||||||
return folders_so_far, res
|
return folders_so_far, res
|
||||||
}
|
}
|
||||||
if mcache.check_for_stop( cfolder, files ) {
|
if mcache.check_for_stop( cfolder, files ) {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
cfolder = filepath.basedir( cfolder )
|
cfolder = os.basedir( cfolder )
|
||||||
folders_so_far << cfolder
|
folders_so_far << cfolder
|
||||||
levels++
|
levels++
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,10 +4,9 @@
|
||||||
module compiler
|
module compiler
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import filepath
|
|
||||||
|
|
||||||
fn get_vtmp_folder() string {
|
fn get_vtmp_folder() string {
|
||||||
vtmp := filepath.join(os.tmpdir(),'v')
|
vtmp := os.join(os.tmpdir(),'v')
|
||||||
if !os.is_dir(vtmp) {
|
if !os.is_dir(vtmp) {
|
||||||
os.mkdir(vtmp)or{
|
os.mkdir(vtmp)or{
|
||||||
panic(err)
|
panic(err)
|
||||||
|
@ -18,5 +17,5 @@ fn get_vtmp_folder() string {
|
||||||
|
|
||||||
fn get_vtmp_filename(base_file_name string, postfix string) string {
|
fn get_vtmp_filename(base_file_name string, postfix string) string {
|
||||||
vtmp := get_vtmp_folder()
|
vtmp := get_vtmp_folder()
|
||||||
return os.realpath(filepath.join(vtmp,filepath.filename(os.realpath(base_file_name)) + postfix))
|
return os.realpath(os.join(vtmp,os.filename(os.realpath(base_file_name)) + postfix))
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,50 +0,0 @@
|
||||||
module filepath
|
|
||||||
|
|
||||||
// ext returns the extension in the file `path`.
|
|
||||||
pub fn ext(path string) string {
|
|
||||||
pos := path.last_index('.') or {
|
|
||||||
return ''
|
|
||||||
}
|
|
||||||
return path[pos..]
|
|
||||||
}
|
|
||||||
|
|
||||||
// is_abs returns true if `path` is absolute.
|
|
||||||
pub fn is_abs(path string) bool {
|
|
||||||
$if windows {
|
|
||||||
return path[0] == `/` || // incase we're in MingGW bash
|
|
||||||
(path[0].is_letter() && path[1] == `:`)
|
|
||||||
}
|
|
||||||
return path[0] == `/`
|
|
||||||
}
|
|
||||||
|
|
||||||
// join returns path as string from string parameter(s).
|
|
||||||
pub fn join(base string, dirs ...string) string {
|
|
||||||
mut result := []string
|
|
||||||
result << base.trim_right('\\/')
|
|
||||||
for d in dirs {
|
|
||||||
result << d
|
|
||||||
}
|
|
||||||
return result.join(separator)
|
|
||||||
}
|
|
||||||
|
|
||||||
// dir returns all but the last element of path, typically the path's directory.
|
|
||||||
pub fn dir(path string) string {
|
|
||||||
pos := path.last_index(separator) or {
|
|
||||||
return '.'
|
|
||||||
}
|
|
||||||
return path[..pos]
|
|
||||||
}
|
|
||||||
|
|
||||||
// basedir returns a directory name from path
|
|
||||||
pub fn basedir(path string) string {
|
|
||||||
pos := path.last_index(separator) or {
|
|
||||||
return path
|
|
||||||
}
|
|
||||||
// NB: *without* terminating /
|
|
||||||
return path[..pos]
|
|
||||||
}
|
|
||||||
|
|
||||||
// filename returns a file name from path
|
|
||||||
pub fn filename(path string) string {
|
|
||||||
return path.all_after(separator)
|
|
||||||
}
|
|
|
@ -1,5 +0,0 @@
|
||||||
module filepath
|
|
||||||
|
|
||||||
pub const (
|
|
||||||
separator = '/'
|
|
||||||
)
|
|
|
@ -1,43 +0,0 @@
|
||||||
import filepath
|
|
||||||
|
|
||||||
fn test_ext() {
|
|
||||||
assert filepath.ext('file.v') == '.v'
|
|
||||||
assert filepath.ext('file') == ''
|
|
||||||
}
|
|
||||||
|
|
||||||
fn test_is_abs() {
|
|
||||||
assert filepath.is_abs('/home/user') == true
|
|
||||||
assert filepath.is_abs('v/vlib') == false
|
|
||||||
|
|
||||||
$if windows {
|
|
||||||
assert filepath.is_abs('C:\\Windows\\') == true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn test_join() {
|
|
||||||
$if windows {
|
|
||||||
assert filepath.join('v', 'vlib', 'filepath') == 'v\\vlib\\filepath'
|
|
||||||
} $else {
|
|
||||||
assert filepath.join('v', 'vlib', 'filepath') == 'v/vlib/filepath'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn test_dir() {
|
|
||||||
$if windows {
|
|
||||||
assert filepath.dir('C:\\a\\b\\c') == 'C:\\a\\b'
|
|
||||||
} $else {
|
|
||||||
assert filepath.dir('/var/tmp/foo') == '/var/tmp'
|
|
||||||
}
|
|
||||||
|
|
||||||
assert filepath.dir('filepath') == '.'
|
|
||||||
}
|
|
||||||
|
|
||||||
fn test_basedir() {
|
|
||||||
$if windows {
|
|
||||||
assert filepath.basedir('v\\vlib\\filepath') == 'v\\vlib'
|
|
||||||
} $else {
|
|
||||||
assert filepath.basedir('v/vlib/filepath') == 'v/vlib'
|
|
||||||
}
|
|
||||||
|
|
||||||
assert filepath.basedir('filename') == 'filename'
|
|
||||||
}
|
|
|
@ -1,5 +0,0 @@
|
||||||
module filepath
|
|
||||||
|
|
||||||
pub const (
|
|
||||||
separator = '\\'
|
|
||||||
)
|
|
|
@ -10,7 +10,6 @@ import (
|
||||||
gg
|
gg
|
||||||
glm
|
glm
|
||||||
gl
|
gl
|
||||||
filepath
|
|
||||||
)
|
)
|
||||||
|
|
||||||
#flag windows -I @VROOT/thirdparty/freetype/include
|
#flag windows -I @VROOT/thirdparty/freetype/include
|
||||||
|
@ -205,7 +204,7 @@ pub fn new_context(cfg gg.Cfg) &FreeType {
|
||||||
}
|
}
|
||||||
if !os.exists(font_path) {
|
if !os.exists(font_path) {
|
||||||
exe_path := os.executable()
|
exe_path := os.executable()
|
||||||
exe_dir := filepath.basedir(exe_path)
|
exe_dir := os.basedir(exe_path)
|
||||||
font_path = '$exe_dir/$font_path'
|
font_path = '$exe_dir/$font_path'
|
||||||
}
|
}
|
||||||
if !os.exists(font_path) {
|
if !os.exists(font_path) {
|
||||||
|
|
|
@ -4,7 +4,6 @@ import (
|
||||||
os
|
os
|
||||||
time
|
time
|
||||||
term
|
term
|
||||||
filepath
|
|
||||||
)
|
)
|
||||||
|
|
||||||
pub enum LogLevel {
|
pub enum LogLevel {
|
||||||
|
@ -69,8 +68,8 @@ pub fn (l mut Log) set_output_level(level LogLevel) {
|
||||||
|
|
||||||
pub fn (l mut Log) set_full_logpath(full_log_path string) {
|
pub fn (l mut Log) set_full_logpath(full_log_path string) {
|
||||||
rlog_file := os.realpath( full_log_path )
|
rlog_file := os.realpath( full_log_path )
|
||||||
l.set_output_label( filepath.filename( rlog_file ) )
|
l.set_output_label( os.filename( rlog_file ) )
|
||||||
l.set_output_path( filepath.basedir( rlog_file ) )
|
l.set_output_path( os.basedir( rlog_file ) )
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn (l mut Log) set_output_label(label string){
|
pub fn (l mut Log) set_output_label(label string){
|
||||||
|
@ -80,7 +79,7 @@ pub fn (l mut Log) set_output_label(label string){
|
||||||
pub fn (l mut Log) set_output_path(output_file_path string) {
|
pub fn (l mut Log) set_output_path(output_file_path string) {
|
||||||
if l.ofile.is_opened() { l.ofile.close() }
|
if l.ofile.is_opened() { l.ofile.close() }
|
||||||
l.output_to_file = true
|
l.output_to_file = true
|
||||||
l.output_file_name = filepath.join( os.realpath( output_file_path ) , l.output_label )
|
l.output_file_name = os.join( os.realpath( output_file_path ) , l.output_label )
|
||||||
ofile := os.open_append( l.output_file_name ) or {
|
ofile := os.open_append( l.output_file_name ) or {
|
||||||
panic('error while opening log file ${l.output_file_name} for appending')
|
panic('error while opening log file ${l.output_file_name} for appending')
|
||||||
}
|
}
|
||||||
|
@ -137,4 +136,3 @@ pub fn (l mut Log) debug(s string) {
|
||||||
if l.level < .debug { return }
|
if l.level < .debug { return }
|
||||||
l.send_output(s, .debug)
|
l.send_output(s, .debug)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
78
vlib/os/os.v
78
vlib/os/os.v
|
@ -3,8 +3,6 @@
|
||||||
// that can be found in the LICENSE file.
|
// that can be found in the LICENSE file.
|
||||||
module os
|
module os
|
||||||
|
|
||||||
import filepath
|
|
||||||
|
|
||||||
#include <sys/stat.h> // #include <signal.h>
|
#include <sys/stat.h> // #include <signal.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
|
||||||
|
@ -183,7 +181,7 @@ pub fn cp_all(osource_path, odest_path string, overwrite bool) ?bool {
|
||||||
}
|
}
|
||||||
// single file copy
|
// single file copy
|
||||||
if !os.is_dir(source_path) {
|
if !os.is_dir(source_path) {
|
||||||
adjasted_path := if os.is_dir(dest_path) { filepath.join(dest_path,filepath.filename(source_path)) } else { dest_path }
|
adjasted_path := if os.is_dir(dest_path) { os.join(dest_path,os.filename(source_path)) } else { dest_path }
|
||||||
if os.exists(adjasted_path) {
|
if os.exists(adjasted_path) {
|
||||||
if overwrite {
|
if overwrite {
|
||||||
os.rm(adjasted_path)
|
os.rm(adjasted_path)
|
||||||
|
@ -204,8 +202,8 @@ pub fn cp_all(osource_path, odest_path string, overwrite bool) ?bool {
|
||||||
return error(err)
|
return error(err)
|
||||||
}
|
}
|
||||||
for file in files {
|
for file in files {
|
||||||
sp := filepath.join(source_path,file)
|
sp := os.join(source_path,file)
|
||||||
dp := filepath.join(dest_path,file)
|
dp := os.join(dest_path,file)
|
||||||
if os.is_dir(sp) {
|
if os.is_dir(sp) {
|
||||||
os.mkdir(dp) or {
|
os.mkdir(dp) or {
|
||||||
panic(err)
|
panic(err)
|
||||||
|
@ -634,10 +632,10 @@ pub fn rmdir_all(path string) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
for item in items {
|
for item in items {
|
||||||
if os.is_dir(filepath.join(path,item)) {
|
if os.is_dir(os.join(path,item)) {
|
||||||
rmdir_all(filepath.join(path,item))
|
rmdir_all(os.join(path,item))
|
||||||
}
|
}
|
||||||
os.rm(filepath.join(path,item))
|
os.rm(os.join(path,item))
|
||||||
}
|
}
|
||||||
os.rmdir(path)
|
os.rmdir(path)
|
||||||
}
|
}
|
||||||
|
@ -655,24 +653,30 @@ fn print_c_errno() {
|
||||||
println('errno=$e err=$se')
|
println('errno=$e err=$se')
|
||||||
}
|
}
|
||||||
|
|
||||||
[deprecated]
|
|
||||||
pub fn ext(path string) string {
|
pub fn ext(path string) string {
|
||||||
panic('Use `filepath.ext` instead of `os.ext`')
|
pos := path.last_index('.') or {
|
||||||
|
return ''
|
||||||
|
}
|
||||||
|
return path[pos..]
|
||||||
}
|
}
|
||||||
|
|
||||||
[deprecated]
|
|
||||||
pub fn dir(path string) string {
|
pub fn dir(path string) string {
|
||||||
panic('Use `filepath.dir` instead of `os.dir`')
|
pos := path.last_index(path_separator) or {
|
||||||
|
return '.'
|
||||||
|
}
|
||||||
|
return path[..pos]
|
||||||
}
|
}
|
||||||
|
|
||||||
[deprecated]
|
|
||||||
pub fn basedir(path string) string {
|
pub fn basedir(path string) string {
|
||||||
panic('Use `filepath.basedir` instead of `os.basedir`')
|
pos := path.last_index(path_separator) or {
|
||||||
|
return path
|
||||||
|
}
|
||||||
|
// NB: *without* terminating /
|
||||||
|
return path[..pos]
|
||||||
}
|
}
|
||||||
|
|
||||||
[deprecated]
|
|
||||||
pub fn filename(path string) string {
|
pub fn filename(path string) string {
|
||||||
panic('Use `filepath.filename` instead of `os.filename`')
|
return path.all_after(path_separator)
|
||||||
}
|
}
|
||||||
|
|
||||||
// get_line returns a one-line string from stdin
|
// get_line returns a one-line string from stdin
|
||||||
|
@ -792,9 +796,9 @@ pub fn user_os() string {
|
||||||
// home_dir returns path to user's home directory.
|
// home_dir returns path to user's home directory.
|
||||||
pub fn home_dir() string {
|
pub fn home_dir() string {
|
||||||
$if windows {
|
$if windows {
|
||||||
return os.getenv('USERPROFILE') + filepath.separator
|
return os.getenv('USERPROFILE') + os.path_separator
|
||||||
} $else {
|
} $else {
|
||||||
return os.getenv('HOME') + filepath.separator
|
return os.getenv('HOME') + os.path_separator
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -988,6 +992,25 @@ pub fn realpath(fpath string) string {
|
||||||
return string(fullpath)
|
return string(fullpath)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// is_abs returns true if `path` is absolute.
|
||||||
|
pub fn is_abs(path string) bool {
|
||||||
|
$if windows {
|
||||||
|
return path[0] == `/` || // incase we're in MingGW bash
|
||||||
|
(path[0].is_letter() && path[1] == `:`)
|
||||||
|
}
|
||||||
|
return path[0] == `/`
|
||||||
|
}
|
||||||
|
|
||||||
|
// join returns path as string from string parameter(s).
|
||||||
|
pub fn join(base string, dirs ...string) string {
|
||||||
|
mut result := []string
|
||||||
|
result << base.trim_right('\\/')
|
||||||
|
for d in dirs {
|
||||||
|
result << d
|
||||||
|
}
|
||||||
|
return result.join(path_separator)
|
||||||
|
}
|
||||||
|
|
||||||
// walk_ext returns a recursive list of all file paths ending with `ext`.
|
// walk_ext returns a recursive list of all file paths ending with `ext`.
|
||||||
pub fn walk_ext(path, ext string) []string {
|
pub fn walk_ext(path, ext string) []string {
|
||||||
if !os.is_dir(path) {
|
if !os.is_dir(path) {
|
||||||
|
@ -997,7 +1020,7 @@ pub fn walk_ext(path, ext string) []string {
|
||||||
return []
|
return []
|
||||||
}
|
}
|
||||||
mut res := []string
|
mut res := []string
|
||||||
separator := if path.ends_with(filepath.separator) { '' } else { filepath.separator }
|
separator := if path.ends_with(os.path_separator) { '' } else { os.path_separator }
|
||||||
for i, file in files {
|
for i, file in files {
|
||||||
if file.starts_with('.') {
|
if file.starts_with('.') {
|
||||||
continue
|
continue
|
||||||
|
@ -1023,7 +1046,7 @@ pub fn walk(path string, f fn(path string)) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
for file in files {
|
for file in files {
|
||||||
p := path + filepath.separator + file
|
p := path + os.path_separator + file
|
||||||
if os.is_dir(p) && !os.is_link(p) {
|
if os.is_dir(p) && !os.is_link(p) {
|
||||||
walk(p, f)
|
walk(p, f)
|
||||||
}
|
}
|
||||||
|
@ -1089,9 +1112,9 @@ pub fn flush() {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn mkdir_all(path string) {
|
pub fn mkdir_all(path string) {
|
||||||
mut p := if path.starts_with(filepath.separator) { filepath.separator } else { '' }
|
mut p := if path.starts_with(os.path_separator) { os.path_separator } else { '' }
|
||||||
for subdir in path.split(filepath.separator) {
|
for subdir in path.split(os.path_separator) {
|
||||||
p += subdir + filepath.separator
|
p += subdir + os.path_separator
|
||||||
if !os.is_dir(p) {
|
if !os.is_dir(p) {
|
||||||
os.mkdir(p) or {
|
os.mkdir(p) or {
|
||||||
panic(err)
|
panic(err)
|
||||||
|
@ -1100,11 +1123,6 @@ pub fn mkdir_all(path string) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[deprecated]
|
|
||||||
pub fn join(base string, dirs ...string) string {
|
|
||||||
panic('Use `filepath.join` instead of `os.join`')
|
|
||||||
}
|
|
||||||
|
|
||||||
// cachedir returns the path to a *writable* user specific folder, suitable for writing non-essential data.
|
// cachedir returns the path to a *writable* user specific folder, suitable for writing non-essential data.
|
||||||
pub fn cachedir() string {
|
pub fn cachedir() string {
|
||||||
// See: https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html
|
// See: https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html
|
||||||
|
@ -1169,10 +1187,10 @@ pub const (
|
||||||
// It gives a convenient way to access program resources like images, fonts, sounds and so on,
|
// It gives a convenient way to access program resources like images, fonts, sounds and so on,
|
||||||
// *no matter* how the program was started, and what is the current working directory.
|
// *no matter* how the program was started, and what is the current working directory.
|
||||||
pub fn resource_abs_path(path string) string {
|
pub fn resource_abs_path(path string) string {
|
||||||
mut base_path := os.realpath(filepath.dir(os.executable()))
|
mut base_path := os.realpath(os.dir(os.executable()))
|
||||||
vresource := os.getenv('V_RESOURCE_PATH')
|
vresource := os.getenv('V_RESOURCE_PATH')
|
||||||
if vresource.len != 0 {
|
if vresource.len != 0 {
|
||||||
base_path = vresource
|
base_path = vresource
|
||||||
}
|
}
|
||||||
return os.realpath( filepath.join( base_path, path ) )
|
return os.realpath( os.join( base_path, path ) )
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,10 +7,6 @@ import strings
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
|
|
||||||
pub const (
|
pub const (
|
||||||
/**
|
|
||||||
* This constant is deprecated. Use `filepath.separator` instead.
|
|
||||||
* FIXME Remove this separator, as it a part of `filepath` module.
|
|
||||||
*/
|
|
||||||
path_separator = '/'
|
path_separator = '/'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,4 @@
|
||||||
import (
|
import os
|
||||||
os
|
|
||||||
filepath
|
|
||||||
)
|
|
||||||
|
|
||||||
fn testsuite_begin() {
|
fn testsuite_begin() {
|
||||||
cleanup_leftovers()
|
cleanup_leftovers()
|
||||||
|
@ -134,14 +131,14 @@ fn walk_callback(file string) {
|
||||||
if file == '.' || file == '..' {
|
if file == '.' || file == '..' {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
assert file == 'test_walk' + filepath.separator + 'test1'
|
assert file == 'test_walk' + os.path_separator + 'test1'
|
||||||
}
|
}
|
||||||
|
|
||||||
fn test_walk() {
|
fn test_walk() {
|
||||||
folder := 'test_walk'
|
folder := 'test_walk'
|
||||||
os.mkdir(folder) or { panic(err) }
|
os.mkdir(folder) or { panic(err) }
|
||||||
|
|
||||||
file1 := folder + filepath.separator + 'test1'
|
file1 := folder + os.path_separator + 'test1'
|
||||||
|
|
||||||
os.write_file(file1,'test-1')
|
os.write_file(file1,'test-1')
|
||||||
|
|
||||||
|
@ -190,7 +187,7 @@ fn test_tmpdir(){
|
||||||
assert t.len > 0
|
assert t.len > 0
|
||||||
assert os.is_dir(t)
|
assert os.is_dir(t)
|
||||||
|
|
||||||
tfile := t + filepath.separator + 'tmpfile.txt'
|
tfile := t + os.path_separator + 'tmpfile.txt'
|
||||||
|
|
||||||
os.rm(tfile) // just in case
|
os.rm(tfile) // just in case
|
||||||
|
|
||||||
|
@ -269,7 +266,7 @@ fn test_symlink() {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn test_is_executable_writable_readable() {
|
fn test_is_executable_writable_readable() {
|
||||||
file_name := os.tmpdir() + filepath.separator + 'rwxfile.exe'
|
file_name := os.tmpdir() + os.path_separator + 'rwxfile.exe'
|
||||||
|
|
||||||
mut f := os.create(file_name) or {
|
mut f := os.create(file_name) or {
|
||||||
eprintln('failed to create file $file_name')
|
eprintln('failed to create file $file_name')
|
||||||
|
@ -294,6 +291,48 @@ fn test_is_executable_writable_readable() {
|
||||||
os.rm(file_name)
|
os.rm(file_name)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn test_ext() {
|
||||||
|
assert os.ext('file.v') == '.v'
|
||||||
|
assert os.ext('file') == ''
|
||||||
|
}
|
||||||
|
|
||||||
|
fn test_is_abs() {
|
||||||
|
assert os.is_abs('/home/user') == true
|
||||||
|
assert os.is_abs('v/vlib') == false
|
||||||
|
|
||||||
|
$if windows {
|
||||||
|
assert os.is_abs('C:\\Windows\\') == true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn test_join() {
|
||||||
|
$if windows {
|
||||||
|
assert os.join('v', 'vlib', 'os') == 'v\\vlib\\os'
|
||||||
|
} $else {
|
||||||
|
assert os.join('v', 'vlib', 'os') == 'v/vlib/os'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn test_dir() {
|
||||||
|
$if windows {
|
||||||
|
assert os.dir('C:\\a\\b\\c') == 'C:\\a\\b'
|
||||||
|
} $else {
|
||||||
|
assert os.dir('/var/tmp/foo') == '/var/tmp'
|
||||||
|
}
|
||||||
|
|
||||||
|
assert os.dir('os') == '.'
|
||||||
|
}
|
||||||
|
|
||||||
|
fn test_basedir() {
|
||||||
|
$if windows {
|
||||||
|
assert os.basedir('v\\vlib\\os') == 'v\\vlib'
|
||||||
|
} $else {
|
||||||
|
assert os.basedir('v/vlib/os') == 'v/vlib'
|
||||||
|
}
|
||||||
|
|
||||||
|
assert os.basedir('filename') == 'filename'
|
||||||
|
}
|
||||||
|
|
||||||
// this function is called by both test_aaa_setup & test_zzz_cleanup
|
// this function is called by both test_aaa_setup & test_zzz_cleanup
|
||||||
// it ensures that os tests do not polute the filesystem with leftover
|
// it ensures that os tests do not polute the filesystem with leftover
|
||||||
// files so that they can be run several times in a row.
|
// files so that they can be run several times in a row.
|
||||||
|
|
|
@ -6,10 +6,6 @@ import strings
|
||||||
#include <winsock2.h>
|
#include <winsock2.h>
|
||||||
|
|
||||||
pub const (
|
pub const (
|
||||||
/**
|
|
||||||
* This constant is deprecated. Use `filepath.separator` instead.
|
|
||||||
* FIXME Remove this separator, as it a part of `filepath` module.
|
|
||||||
*/
|
|
||||||
path_separator = '\\'
|
path_separator = '\\'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,6 @@ module builder
|
||||||
import (
|
import (
|
||||||
os
|
os
|
||||||
time
|
time
|
||||||
filepath
|
|
||||||
v.ast
|
v.ast
|
||||||
v.table
|
v.table
|
||||||
v.pref
|
v.pref
|
||||||
|
@ -183,7 +182,7 @@ pub fn (b &Builder) v_files_from_dir(dir string) []string {
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
res << filepath.join(dir,file)
|
res << os.join(dir,file)
|
||||||
}
|
}
|
||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
@ -201,13 +200,13 @@ pub fn (b &Builder) log(s string) {
|
||||||
[inline]
|
[inline]
|
||||||
fn module_path(mod string) string {
|
fn module_path(mod string) string {
|
||||||
// submodule support
|
// submodule support
|
||||||
return mod.replace('.', filepath.separator)
|
return mod.replace('.', os.path_separator)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn (b &Builder) find_module_path(mod string) ?string {
|
pub fn (b &Builder) find_module_path(mod string) ?string {
|
||||||
mod_path := module_path(mod)
|
mod_path := module_path(mod)
|
||||||
for search_path in b.module_search_paths {
|
for search_path in b.module_search_paths {
|
||||||
try_path := filepath.join(search_path,mod_path)
|
try_path := os.join(search_path,mod_path)
|
||||||
if b.pref.verbosity.is_higher_or_equal(.level_three) {
|
if b.pref.verbosity.is_higher_or_equal(.level_three) {
|
||||||
println(' >> trying to find $mod in $try_path ..')
|
println(' >> trying to find $mod in $try_path ..')
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,7 +8,6 @@ import (
|
||||||
v.table
|
v.table
|
||||||
v.token
|
v.token
|
||||||
os
|
os
|
||||||
filepath
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
@ -920,7 +919,7 @@ pub fn (c mut Checker) error(s string, pos token.Position) {
|
||||||
print_backtrace()
|
print_backtrace()
|
||||||
mut path := c.file.path
|
mut path := c.file.path
|
||||||
// Get relative path
|
// Get relative path
|
||||||
workdir := os.getwd() + filepath.separator
|
workdir := os.getwd() + os.path_separator
|
||||||
if path.starts_with(workdir) {
|
if path.starts_with(workdir) {
|
||||||
path = path.replace(workdir, '')
|
path = path.replace(workdir, '')
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,7 +8,6 @@ import (
|
||||||
v.parser
|
v.parser
|
||||||
v.ast
|
v.ast
|
||||||
os
|
os
|
||||||
filepath
|
|
||||||
)
|
)
|
||||||
|
|
||||||
struct Doc {
|
struct Doc {
|
||||||
|
@ -27,9 +26,9 @@ pub fn doc(mod string, table &table.Table) string {
|
||||||
table: table
|
table: table
|
||||||
mod: mod
|
mod: mod
|
||||||
}
|
}
|
||||||
vlib_path := filepath.dir(pref.vexe_path()) + '/vlib'
|
vlib_path := os.dir(pref.vexe_path()) + '/vlib'
|
||||||
mod_path := mod.replace('.', filepath.separator)
|
mod_path := mod.replace('.', os.path_separator)
|
||||||
path := filepath.join(vlib_path, mod_path)
|
path := os.join(vlib_path, mod_path)
|
||||||
if !os.exists(path) {
|
if !os.exists(path) {
|
||||||
println('module "$mod" not found')
|
println('module "$mod" not found')
|
||||||
println(path)
|
println(path)
|
||||||
|
@ -46,7 +45,7 @@ pub fn doc(mod string, table &table.Table) string {
|
||||||
if file.ends_with('_test.v') || file.ends_with('_windows.v') || file.ends_with('_macos.v') {
|
if file.ends_with('_test.v') || file.ends_with('_windows.v') || file.ends_with('_macos.v') {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
file_ast := parser.parse_file(filepath.join(path,file), table, .skip_comments)
|
file_ast := parser.parse_file(os.join(path,file), table, .skip_comments)
|
||||||
d.stmts << file_ast.stmts
|
d.stmts << file_ast.stmts
|
||||||
}
|
}
|
||||||
d.print_fns()
|
d.print_fns()
|
||||||
|
|
|
@ -2,7 +2,6 @@ import (
|
||||||
os
|
os
|
||||||
term
|
term
|
||||||
benchmark
|
benchmark
|
||||||
filepath
|
|
||||||
v.fmt
|
v.fmt
|
||||||
v.parser
|
v.parser
|
||||||
v.table
|
v.table
|
||||||
|
@ -21,7 +20,7 @@ fn test_fmt() {
|
||||||
eprintln('VEXE must be set')
|
eprintln('VEXE must be set')
|
||||||
exit(error_missing_vexe)
|
exit(error_missing_vexe)
|
||||||
}
|
}
|
||||||
vroot := filepath.dir(vexe)
|
vroot := os.dir(vexe)
|
||||||
tmpfolder := os.tmpdir()
|
tmpfolder := os.tmpdir()
|
||||||
diff_cmd := find_working_diff_command() or {
|
diff_cmd := find_working_diff_command() or {
|
||||||
''
|
''
|
||||||
|
@ -33,7 +32,7 @@ fn test_fmt() {
|
||||||
for istep, ipath in input_files {
|
for istep, ipath in input_files {
|
||||||
fmt_bench.cstep = istep
|
fmt_bench.cstep = istep
|
||||||
fmt_bench.step()
|
fmt_bench.step()
|
||||||
ifilename := filepath.filename(ipath)
|
ifilename := os.filename(ipath)
|
||||||
opath := ipath.replace('_input.vv', '_expected.vv')
|
opath := ipath.replace('_input.vv', '_expected.vv')
|
||||||
if !os.exists(opath) {
|
if !os.exists(opath) {
|
||||||
fmt_bench.fail()
|
fmt_bench.fail()
|
||||||
|
@ -55,7 +54,7 @@ fn test_fmt() {
|
||||||
eprintln('>> sorry, but no working "diff" CLI command can be found')
|
eprintln('>> sorry, but no working "diff" CLI command can be found')
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
vfmt_result_file := filepath.join(tmpfolder,'vfmt_run_over_${ifilename}')
|
vfmt_result_file := os.join(tmpfolder,'vfmt_run_over_${ifilename}')
|
||||||
os.write_file(vfmt_result_file, result_ocontent)
|
os.write_file(vfmt_result_file, result_ocontent)
|
||||||
os.system('$diff_cmd --minimal --text --unified=2 --show-function-line="fn " "$opath" "$vfmt_result_file"')
|
os.system('$diff_cmd --minimal --text --unified=2 --show-function-line="fn " "$opath" "$vfmt_result_file"')
|
||||||
continue
|
continue
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import (
|
import (
|
||||||
filepath
|
math
|
||||||
os
|
os
|
||||||
)
|
)
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
import filepath
|
import math
|
||||||
import os
|
import os
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
import (
|
import (
|
||||||
os
|
os
|
||||||
filepath
|
|
||||||
v.pref
|
v.pref
|
||||||
v.builder
|
v.builder
|
||||||
term
|
term
|
||||||
|
@ -13,7 +12,7 @@ const (
|
||||||
fn test_c_files() {
|
fn test_c_files() {
|
||||||
println('Running V => C tests')
|
println('Running V => C tests')
|
||||||
vexe := os.getenv('VEXE')
|
vexe := os.getenv('VEXE')
|
||||||
vroot := filepath.dir(vexe)
|
vroot := os.dir(vexe)
|
||||||
term_ok := term.ok_message('OK')
|
term_ok := term.ok_message('OK')
|
||||||
term_fail := term.fail_message('FAIL')
|
term_fail := term.fail_message('FAIL')
|
||||||
for i in 1 .. (nr_tests + 1) {
|
for i in 1 .. (nr_tests + 1) {
|
||||||
|
|
|
@ -11,7 +11,6 @@ import (
|
||||||
v.pref
|
v.pref
|
||||||
term
|
term
|
||||||
os
|
os
|
||||||
filepath
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
@ -414,7 +413,7 @@ pub fn (p &Parser) error(s string) {
|
||||||
print_backtrace()
|
print_backtrace()
|
||||||
mut path := p.file_name
|
mut path := p.file_name
|
||||||
// Get relative path
|
// Get relative path
|
||||||
workdir := os.getwd() + filepath.separator
|
workdir := os.getwd() + os.path_separator
|
||||||
if path.starts_with(workdir) {
|
if path.starts_with(workdir) {
|
||||||
path = path.replace(workdir, '')
|
path = path.replace(workdir, '')
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,10 +3,7 @@
|
||||||
// that can be found in the LICENSE file.
|
// that can be found in the LICENSE file.
|
||||||
module pref
|
module pref
|
||||||
|
|
||||||
import (
|
import os
|
||||||
filepath
|
|
||||||
os
|
|
||||||
)
|
|
||||||
|
|
||||||
pub const (
|
pub const (
|
||||||
default_module_path = os.home_dir() + '.vmodules'
|
default_module_path = os.home_dir() + '.vmodules'
|
||||||
|
@ -15,9 +12,9 @@ pub const (
|
||||||
pub fn (p mut Preferences) fill_with_defaults() {
|
pub fn (p mut Preferences) fill_with_defaults() {
|
||||||
if p.vroot == '' {
|
if p.vroot == '' {
|
||||||
// Location of all vlib files
|
// Location of all vlib files
|
||||||
p.vroot = filepath.dir(vexe_path())
|
p.vroot = os.dir(vexe_path())
|
||||||
}
|
}
|
||||||
vlib_path := filepath.join(p.vroot, 'vlib')
|
vlib_path := os.join(p.vroot, 'vlib')
|
||||||
if p.lookup_path.len == 0 {
|
if p.lookup_path.len == 0 {
|
||||||
p.lookup_path = ['@vlib', '@vmodules']
|
p.lookup_path = ['@vlib', '@vmodules']
|
||||||
}
|
}
|
||||||
|
@ -26,14 +23,14 @@ pub fn (p mut Preferences) fill_with_defaults() {
|
||||||
}
|
}
|
||||||
rpath := os.realpath(p.path)
|
rpath := os.realpath(p.path)
|
||||||
if p.out_name == ''{
|
if p.out_name == ''{
|
||||||
filename := filepath.filename(rpath).trim_space()
|
filename := os.filename(rpath).trim_space()
|
||||||
mut base := filename.all_before_last('.')
|
mut base := filename.all_before_last('.')
|
||||||
if base == '' {
|
if base == '' {
|
||||||
// The file name is just `.v` or `.vsh` or `.*`
|
// The file name is just `.v` or `.vsh` or `.*`
|
||||||
base = filename
|
base = filename
|
||||||
}
|
}
|
||||||
target_dir := if os.is_dir(rpath) { rpath } else { filepath.dir(rpath) }
|
target_dir := if os.is_dir(rpath) { rpath } else { os.dir(rpath) }
|
||||||
p.out_name = filepath.join(target_dir, base)
|
p.out_name = os.join(target_dir, base)
|
||||||
|
|
||||||
if rpath == '$p.vroot/cmd/v' && os.is_dir('vlib/compiler') {
|
if rpath == '$p.vroot/cmd/v' && os.is_dir('vlib/compiler') {
|
||||||
// Building V? Use v2, since we can't overwrite a running
|
// Building V? Use v2, since we can't overwrite a running
|
||||||
|
@ -44,7 +41,7 @@ pub fn (p mut Preferences) fill_with_defaults() {
|
||||||
p.out_name = 'v2'
|
p.out_name = 'v2'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
rpath_name := filepath.filename(rpath)
|
rpath_name := os.filename(rpath)
|
||||||
p.building_v = !p.is_repl && (rpath_name == 'v' || rpath_name == 'vfmt.v')
|
p.building_v = !p.is_repl && (rpath_name == 'v' || rpath_name == 'vfmt.v')
|
||||||
if p.os == ._auto {
|
if p.os == ._auto {
|
||||||
// No OS specifed? Use current system
|
// No OS specifed? Use current system
|
||||||
|
|
|
@ -5,9 +5,7 @@ module scanner
|
||||||
|
|
||||||
import (
|
import (
|
||||||
os
|
os
|
||||||
filepath
|
|
||||||
v.token
|
v.token
|
||||||
// strings
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
@ -929,7 +927,7 @@ fn (s mut Scanner) debug_tokens() {
|
||||||
s.pos = 0
|
s.pos = 0
|
||||||
s.started = false
|
s.started = false
|
||||||
s.debug = true
|
s.debug = true
|
||||||
fname := s.file_path.all_after(filepath.separator)
|
fname := s.file_path.all_after(os.path_separator)
|
||||||
println('\n===DEBUG TOKENS $fname===')
|
println('\n===DEBUG TOKENS $fname===')
|
||||||
for {
|
for {
|
||||||
tok := s.scan()
|
tok := s.scan()
|
||||||
|
|
|
@ -10,7 +10,6 @@ import (
|
||||||
net.http
|
net.http
|
||||||
net.urllib
|
net.urllib
|
||||||
strings
|
strings
|
||||||
filepath
|
|
||||||
)
|
)
|
||||||
|
|
||||||
pub const (
|
pub const (
|
||||||
|
@ -331,7 +330,7 @@ fn (ctx mut Context) scan_static_directory(directory_path, mount_path string) {
|
||||||
if os.is_dir(file) {
|
if os.is_dir(file) {
|
||||||
ctx.scan_static_directory(directory_path + '/' + file, mount_path + '/' + file)
|
ctx.scan_static_directory(directory_path + '/' + file, mount_path + '/' + file)
|
||||||
} else if file.contains('.') && ! file.starts_with('.') && ! file.ends_with('.') {
|
} else if file.contains('.') && ! file.starts_with('.') && ! file.ends_with('.') {
|
||||||
ext := filepath.ext(file)
|
ext := os.ext(file)
|
||||||
|
|
||||||
// Rudimentary guard against adding files not in mime_types.
|
// Rudimentary guard against adding files not in mime_types.
|
||||||
// Use serve_static directly to add non-standard mime types.
|
// Use serve_static directly to add non-standard mime types.
|
||||||
|
|
Loading…
Reference in New Issue