mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
os, filepath: reorganize functions
This commit is contained in:
parent
6e130cd446
commit
dced76d1a4
@ -2,13 +2,16 @@
|
|||||||
// Use of this source code is governed by an MIT license
|
// Use of this source code is governed by an MIT license
|
||||||
// that can be found in the LICENSE file.
|
// that can be found in the LICENSE file.
|
||||||
|
|
||||||
import os
|
import (
|
||||||
import time
|
os
|
||||||
|
time
|
||||||
|
filepath
|
||||||
|
)
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
exe := os.executable()
|
exe := os.executable()
|
||||||
dir := os.dir(exe)
|
dir := filepath.dir(exe)
|
||||||
vdir := os.dir(os.dir(dir))
|
vdir := filepath.dir(filepath.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/tools/fast/`')
|
println('fast.html generator needs to be located in `v/tools/fast/`')
|
||||||
}
|
}
|
||||||
|
@ -108,7 +108,7 @@ 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 := vexe_path()
|
vexe := vexe_path()
|
||||||
parent_dir := os.dir(vexe)
|
parent_dir := filepath.dir(vexe)
|
||||||
vlib_should_be_present( parent_dir )
|
vlib_should_be_present( parent_dir )
|
||||||
vargs := zargs.replace(vexe, '')
|
vargs := zargs.replace(vexe, '')
|
||||||
|
|
||||||
@ -148,7 +148,7 @@ pub fn building_any_v_binaries_failed() bool {
|
|||||||
eprintln('Building V binaries...')
|
eprintln('Building V binaries...')
|
||||||
eprintln('VFLAGS is: "' + os.getenv('VFLAGS') + '"')
|
eprintln('VFLAGS is: "' + os.getenv('VFLAGS') + '"')
|
||||||
vexe := testing.vexe_path()
|
vexe := testing.vexe_path()
|
||||||
parent_dir := os.dir(vexe)
|
parent_dir := filepath.dir(vexe)
|
||||||
testing.vlib_should_be_present( parent_dir )
|
testing.vlib_should_be_present( parent_dir )
|
||||||
os.chdir( parent_dir )
|
os.chdir( parent_dir )
|
||||||
|
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
import os
|
import (
|
||||||
|
os
|
||||||
import flag
|
flag
|
||||||
|
filepath
|
||||||
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
tool_version = '0.0.4'
|
tool_version = '0.0.4'
|
||||||
@ -212,7 +214,7 @@ fn main(){
|
|||||||
used_tools_must_exist(['cp','rm','strip','make','git','upx','cc','wc','tail','hyperfine'])
|
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(os.filename(os.executable()))
|
fp.application(filepath.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]')
|
||||||
|
@ -1,9 +1,12 @@
|
|||||||
module main
|
module main
|
||||||
|
|
||||||
import os
|
import (
|
||||||
import flag
|
os
|
||||||
import compiler
|
flag
|
||||||
import strings
|
strings
|
||||||
|
filepath
|
||||||
|
compiler
|
||||||
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
tool_version = '0.0.1'
|
tool_version = '0.0.1'
|
||||||
@ -48,10 +51,10 @@ fn analyze_v_file(file string) {
|
|||||||
|
|
||||||
fn main(){
|
fn main(){
|
||||||
toolexe := os.executable()
|
toolexe := os.executable()
|
||||||
compiler.set_vroot_folder( os.dir(os.dir(toolexe)) )
|
compiler.set_vroot_folder( filepath.dir(filepath.dir(toolexe)) )
|
||||||
|
|
||||||
mut fp := flag.new_flag_parser(os.args)
|
mut fp := flag.new_flag_parser(os.args)
|
||||||
fp.application(os.filename(toolexe))
|
fp.application(filepath.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]...')
|
||||||
|
@ -25,7 +25,7 @@ fn v_test_compiler(vargs string){
|
|||||||
fn v_test_compiler2(vargs string){
|
fn v_test_compiler2(vargs string){
|
||||||
|
|
||||||
vexe := testing.vexe_path()
|
vexe := testing.vexe_path()
|
||||||
parent_dir := os.dir(vexe)
|
parent_dir := filepath.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,
|
||||||
|
@ -1,4 +1,7 @@
|
|||||||
import os
|
import (
|
||||||
|
os
|
||||||
|
filepath
|
||||||
|
)
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
println('Updating V...')
|
println('Updating V...')
|
||||||
|
2
v.v
2
v.v
@ -109,7 +109,7 @@ fn v_command(command string, args []string) {
|
|||||||
}
|
}
|
||||||
'doc' {
|
'doc' {
|
||||||
vexe := os.executable()
|
vexe := os.executable()
|
||||||
vdir := os.dir(os.executable())
|
vdir := filepath.dir(os.executable())
|
||||||
os.chdir(vdir)
|
os.chdir(vdir)
|
||||||
mod := args.last()
|
mod := args.last()
|
||||||
os.system('$vexe build module vlib$os.path_separator' + args.last())
|
os.system('$vexe build module vlib$os.path_separator' + args.last())
|
||||||
|
@ -1,11 +1,14 @@
|
|||||||
import os
|
import (
|
||||||
|
os
|
||||||
|
filepath
|
||||||
|
)
|
||||||
|
|
||||||
fn test_syscallwrappers() {
|
fn test_syscallwrappers() {
|
||||||
if true { return }
|
if true { return }
|
||||||
$if linux {
|
$if linux {
|
||||||
$if x64 {
|
$if x64 {
|
||||||
exe := os.executable()
|
exe := os.executable()
|
||||||
vdir := os.dir(exe)
|
vdir := filepath.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)
|
||||||
|
@ -30,7 +30,7 @@ fn (v mut V) cc() {
|
|||||||
}
|
}
|
||||||
v.build_thirdparty_obj_files()
|
v.build_thirdparty_obj_files()
|
||||||
vexe := vexe_path()
|
vexe := vexe_path()
|
||||||
vdir := os.dir(vexe)
|
vdir := filepath.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`
|
||||||
if v.out_name.ends_with('.c') || v.out_name.ends_with('.js') {
|
if v.out_name.ends_with('.c') || v.out_name.ends_with('.js') {
|
||||||
|
@ -3,8 +3,11 @@
|
|||||||
// that can be found in the LICENSE file.
|
// that can be found in the LICENSE file.
|
||||||
module compiler
|
module compiler
|
||||||
|
|
||||||
import os
|
import (
|
||||||
import strings
|
os
|
||||||
|
strings
|
||||||
|
filepath
|
||||||
|
)
|
||||||
|
|
||||||
struct CGen {
|
struct CGen {
|
||||||
out os.File
|
out os.File
|
||||||
@ -275,7 +278,7 @@ fn 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 := os.dir(obj_path)
|
parent := filepath.dir(obj_path)
|
||||||
files := os.ls(parent)or{
|
files := os.ls(parent)or{
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,7 @@ 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() {
|
||||||
@ -164,7 +165,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 = os.dir(p.scanner.file_path) + '/' + path
|
path = filepath.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,7 +1,10 @@
|
|||||||
module compiler
|
module compiler
|
||||||
|
|
||||||
import os
|
import (
|
||||||
import time
|
os
|
||||||
|
time
|
||||||
|
filepath
|
||||||
|
)
|
||||||
|
|
||||||
fn (v &V) generate_hotcode_reloading_compiler_flags() []string {
|
fn (v &V) generate_hotcode_reloading_compiler_flags() []string {
|
||||||
mut a := []string
|
mut a := []string
|
||||||
@ -52,7 +55,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 := os.filename(v.dir).replace('.v', '')
|
file_base := filepath.filename(v.dir).replace('.v', '')
|
||||||
if v.os != .windows {
|
if v.os != .windows {
|
||||||
// unix:
|
// unix:
|
||||||
so_name := file_base + '.so'
|
so_name := file_base + '.so'
|
||||||
@ -77,7 +80,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.dir)
|
mut file := os.realpath(v.dir)
|
||||||
file_base := os.filename(file).replace('.v', '')
|
file_base := filepath.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.
|
||||||
|
@ -806,7 +806,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 = os.basedir(single_test_v_file)
|
dir = filepath.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
|
||||||
@ -927,7 +927,7 @@ pub fn new_v(args []string) &V {
|
|||||||
// optional, custom modules search path
|
// optional, custom modules search path
|
||||||
user_mod_path := get_cmdline_option(args, '-user_mod_path', '')
|
user_mod_path := get_cmdline_option(args, '-user_mod_path', '')
|
||||||
// Location of all vlib files
|
// Location of all vlib files
|
||||||
vroot := os.dir(vexe_path())
|
vroot := filepath.dir(vexe_path())
|
||||||
vlib_path := get_cmdline_option(args, '-vlib-path', filepath.join(vroot,'vlib'))
|
vlib_path := get_cmdline_option(args, '-vlib-path', filepath.join(vroot,'vlib'))
|
||||||
vpath := get_cmdline_option(args, '-vpath', v_modules_path)
|
vpath := get_cmdline_option(args, '-vpath', v_modules_path)
|
||||||
mut vgen_buf := strings.new_builder(1000)
|
mut vgen_buf := strings.new_builder(1000)
|
||||||
@ -1064,7 +1064,7 @@ pub fn new_v(args []string) &V {
|
|||||||
compile_defines, compile_defines_all := parse_defines( defines )
|
compile_defines, compile_defines_all := parse_defines( defines )
|
||||||
|
|
||||||
rdir := os.realpath(dir)
|
rdir := os.realpath(dir)
|
||||||
rdir_name := os.filename(rdir)
|
rdir_name := filepath.filename(rdir)
|
||||||
if '-bare' in args {
|
if '-bare' in args {
|
||||||
verror('use -freestanding instead of -bare')
|
verror('use -freestanding instead of -bare')
|
||||||
}
|
}
|
||||||
@ -1125,7 +1125,7 @@ pub fn new_v(args []string) &V {
|
|||||||
os: _os
|
os: _os
|
||||||
out_name: out_name
|
out_name: out_name
|
||||||
dir: dir
|
dir: dir
|
||||||
compiled_dir: if os.is_dir(rdir) { rdir } else { os.dir(rdir) }
|
compiled_dir: if os.is_dir(rdir) { rdir } else { filepath.dir(rdir) }
|
||||||
lang_dir: vroot
|
lang_dir: vroot
|
||||||
table: new_table(obfuscate)
|
table: new_table(obfuscate)
|
||||||
out_name_c: out_name_c
|
out_name_c: out_name_c
|
||||||
@ -1164,7 +1164,6 @@ pub fn env_vflags_and_os_args() []string {
|
|||||||
return non_empty(args)
|
return non_empty(args)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
pub fn create_symlink() {
|
pub fn create_symlink() {
|
||||||
$if windows {
|
$if windows {
|
||||||
return
|
return
|
||||||
|
@ -28,7 +28,7 @@ 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 := vexe_path()
|
vexe := vexe_path()
|
||||||
full_mod_path := filepath.join(os.dir(vexe),mod)
|
full_mod_path := filepath.join(filepath.dir(vexe),mod)
|
||||||
dir := if mod.starts_with('vlib') { '$compiler.v_modules_path${os.path_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(os.path_separator)
|
pdir := dir.all_before_last(os.path_separator)
|
||||||
|
@ -165,7 +165,7 @@ fn (v mut V) set_module_lookup_paths() {
|
|||||||
// 4.2) search in ~/.vmodules/ (i.e. modules installed with vpm) (no -vpath)
|
// 4.2) search in ~/.vmodules/ (i.e. modules installed with vpm) (no -vpath)
|
||||||
v.module_lookup_paths = []
|
v.module_lookup_paths = []
|
||||||
if v.pref.is_test {
|
if v.pref.is_test {
|
||||||
v.module_lookup_paths << os.basedir(v.compiled_dir) // pdir of _test.v
|
v.module_lookup_paths << filepath.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 << filepath.join(v.compiled_dir,'modules')
|
||||||
|
@ -1,6 +1,9 @@
|
|||||||
module compiler
|
module compiler
|
||||||
|
|
||||||
import os
|
import (
|
||||||
|
os
|
||||||
|
filepath
|
||||||
|
)
|
||||||
|
|
||||||
#flag windows -l shell32
|
#flag windows -l shell32
|
||||||
#flag windows -l dbghelp
|
#flag windows -l dbghelp
|
||||||
@ -311,7 +314,7 @@ 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 := os.dir(obj_path)
|
parent := filepath.dir(obj_path)
|
||||||
files := os.ls(parent)or{
|
files := os.ls(parent)or{
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
@ -6,6 +6,7 @@ module compiler
|
|||||||
import (
|
import (
|
||||||
os
|
os
|
||||||
strings
|
strings
|
||||||
|
filepath
|
||||||
compiler.x64
|
compiler.x64
|
||||||
// time
|
// time
|
||||||
)
|
)
|
||||||
@ -2329,7 +2330,7 @@ struct IndexConfig {
|
|||||||
|
|
||||||
// for debugging only
|
// for debugging only
|
||||||
fn (p &Parser) fileis(s string) bool {
|
fn (p &Parser) fileis(s string) bool {
|
||||||
return os.filename(p.scanner.file_path).contains(s)
|
return filepath.filename(p.scanner.file_path).contains(s)
|
||||||
}
|
}
|
||||||
|
|
||||||
// in and dot have higher priority than `!`
|
// in and dot have higher priority than `!`
|
||||||
|
@ -9,9 +9,12 @@ module main
|
|||||||
/// code, instead of in embedded C ...
|
/// code, instead of in embedded C ...
|
||||||
///////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
import os
|
import (
|
||||||
import benchmark
|
os
|
||||||
import term
|
term
|
||||||
|
filepath
|
||||||
|
benchmark
|
||||||
|
)
|
||||||
|
|
||||||
struct BenchedTests {
|
struct BenchedTests {
|
||||||
mut:
|
mut:
|
||||||
@ -75,7 +78,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( ' ' + b.bench.total_message('running V tests in "' + os.filename(b.test_suit_file) + '"' ) )
|
println( ' ' + b.bench.total_message('running V tests in "' + filepath.filename(b.test_suit_file) + '"' ) )
|
||||||
}
|
}
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////
|
||||||
|
@ -1,6 +1,9 @@
|
|||||||
module runner
|
module runner
|
||||||
|
|
||||||
import os
|
import (
|
||||||
|
os
|
||||||
|
filepath
|
||||||
|
)
|
||||||
|
|
||||||
struct RunnerOptions {
|
struct RunnerOptions {
|
||||||
pub:
|
pub:
|
||||||
@ -17,7 +20,7 @@ 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 = os.dir(path)
|
path = filepath.dir(path)
|
||||||
}
|
}
|
||||||
vexec := path + os.path_separator + vname
|
vexec := path + os.path_separator + vname
|
||||||
/*
|
/*
|
||||||
|
@ -18,6 +18,5 @@ pub fn get_vtmp_folder() string {
|
|||||||
|
|
||||||
pub fn get_vtmp_filename(base_file_name string, postfix string) string {
|
pub 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,os.filename(os.realpath(base_file_name)) + postfix))
|
return os.realpath(filepath.join(vtmp,filepath.filename(os.realpath(base_file_name)) + postfix))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,11 +1,14 @@
|
|||||||
module compiler
|
module compiler
|
||||||
|
|
||||||
import os
|
import (
|
||||||
|
os
|
||||||
|
filepath
|
||||||
|
)
|
||||||
|
|
||||||
pub fn launch_tool(tname string) {
|
pub fn launch_tool(tname string) {
|
||||||
is_verbose := '-verbose' in os.args || '--verbose' in os.args
|
is_verbose := '-verbose' in os.args || '--verbose' in os.args
|
||||||
vexe := vexe_path()
|
vexe := vexe_path()
|
||||||
vroot := os.dir(vexe)
|
vroot := filepath.dir(vexe)
|
||||||
set_vroot_folder( vroot ) // needed by tools to find back v
|
set_vroot_folder( vroot ) // needed by tools to find back v
|
||||||
tool_args := os.args[1..].join(' ')
|
tool_args := os.args[1..].join(' ')
|
||||||
tool_exe := os.realpath('$vroot/tools/$tname')
|
tool_exe := os.realpath('$vroot/tools/$tname')
|
||||||
|
@ -3,18 +3,16 @@ module filepath
|
|||||||
import (
|
import (
|
||||||
os
|
os
|
||||||
)
|
)
|
||||||
// return the extension in the file `path`
|
|
||||||
|
|
||||||
|
|
||||||
|
// ext returns the extension in the file `path`.
|
||||||
pub fn ext(path string) string {
|
pub fn ext(path string) string {
|
||||||
pos := path.last_index_byte(`.`)
|
pos := path.last_index('.') or {
|
||||||
if pos != -1 {
|
|
||||||
return path[pos..]
|
|
||||||
}
|
|
||||||
return ''
|
return ''
|
||||||
}
|
}
|
||||||
|
return path[pos..]
|
||||||
|
}
|
||||||
|
|
||||||
// returns true if `path` is absolute
|
// is_abs returns true if `path` is absolute.
|
||||||
pub fn is_abs(path string) bool {
|
pub fn is_abs(path string) bool {
|
||||||
$if windows {
|
$if windows {
|
||||||
return path[0] == `/` || // incase we're in MingGW bash
|
return path[0] == `/` || // incase we're in MingGW bash
|
||||||
@ -23,8 +21,7 @@ pub fn is_abs(path string) bool {
|
|||||||
return path[0] == `/`
|
return path[0] == `/`
|
||||||
}
|
}
|
||||||
|
|
||||||
// pass directories as parameters, returns path as string
|
// join returns path as string from string parameter(s).
|
||||||
// TODO use []string.join once ...string becomes "[]string"
|
|
||||||
pub fn join(base string, dirs ...string) string {
|
pub fn join(base string, dirs ...string) string {
|
||||||
mut result := []string
|
mut result := []string
|
||||||
result << base.trim_right('\\/')
|
result << base.trim_right('\\/')
|
||||||
@ -34,3 +31,27 @@ pub fn join(base string, dirs ...string) string {
|
|||||||
return result.join(os.path_separator)
|
return result.join(os.path_separator)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// dir returns all but the last element of path, typically the path's directory.
|
||||||
|
pub fn dir(path string) string {
|
||||||
|
if path == '.' {
|
||||||
|
return os.getwd()
|
||||||
|
}
|
||||||
|
pos := path.last_index(os.path_separator) or {
|
||||||
|
return '.'
|
||||||
|
}
|
||||||
|
return path[..pos]
|
||||||
|
}
|
||||||
|
|
||||||
|
// basedir returns a directory name from path
|
||||||
|
pub fn basedir(path string) string {
|
||||||
|
pos := path.last_index(os.path_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(os.path_separator)
|
||||||
|
}
|
||||||
|
43
vlib/filepath/filepath_test.v
Normal file
43
vlib/filepath/filepath_test.v
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
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'
|
||||||
|
}
|
@ -10,6 +10,7 @@ import (
|
|||||||
gg
|
gg
|
||||||
glm
|
glm
|
||||||
gl
|
gl
|
||||||
|
filepath
|
||||||
)
|
)
|
||||||
|
|
||||||
#flag windows -I @VROOT/thirdparty/freetype/include
|
#flag windows -I @VROOT/thirdparty/freetype/include
|
||||||
@ -175,7 +176,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 := os.basedir(exe_path)
|
exe_dir := filepath.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) {
|
||||||
|
@ -67,8 +67,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( os.filename( rlog_file ) )
|
l.set_output_label( filepath.filename( rlog_file ) )
|
||||||
l.set_output_path( os.basedir( rlog_file ) )
|
l.set_output_path( filepath.basedir( rlog_file ) )
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn (l mut Log) set_output_label(label string){
|
pub fn (l mut Log) set_output_label(label string){
|
||||||
|
38
vlib/os/os.v
38
vlib/os/os.v
@ -169,7 +169,7 @@ pub fn cp_r(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,os.filename(source_path)) } else { dest_path }
|
adjasted_path := if os.is_dir(dest_path) { filepath.join(dest_path,filepath.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)
|
||||||
@ -611,40 +611,28 @@ fn print_c_errno() {
|
|||||||
// C.printf('errno=%d err="%s"\n', C.errno, C.strerror(C.errno))
|
// C.printf('errno=%d err="%s"\n', C.errno, C.strerror(C.errno))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[deprecated]
|
||||||
pub fn ext(path string) string {
|
pub fn ext(path string) string {
|
||||||
pos := path.last_index('.') or {
|
println('Use filepath.ext')
|
||||||
return ''
|
return filepath.ext(path)
|
||||||
}
|
|
||||||
return path[pos..]
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// dir returns all but the last element of path, typically the path's directory.
|
[deprecated]
|
||||||
pub fn dir(path string) string {
|
pub fn dir(path string) string {
|
||||||
if path == '.' {
|
println('Use filepath.dir')
|
||||||
return getwd()
|
return filepath.ext(path)
|
||||||
}
|
|
||||||
pos := path.last_index(path_separator) or {
|
|
||||||
return '.'
|
|
||||||
}
|
|
||||||
return path[..pos]
|
|
||||||
}
|
|
||||||
|
|
||||||
fn path_sans_ext(path string) string {
|
|
||||||
pos := path.last_index('.') or {
|
|
||||||
return path
|
|
||||||
}
|
|
||||||
return path[..pos]
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[deprecated]
|
||||||
pub fn basedir(path string) string {
|
pub fn basedir(path string) string {
|
||||||
pos := path.last_index(path_separator) or {
|
println('Use filepath.basedir')
|
||||||
return path
|
return filepath.basedir(path)
|
||||||
}
|
|
||||||
return path[..pos] // NB: *without* terminating /
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[deprecated]
|
||||||
pub fn filename(path string) string {
|
pub fn filename(path string) string {
|
||||||
return path.all_after(path_separator)
|
println('Use filepath.filename')
|
||||||
|
return filepath.filename(path)
|
||||||
}
|
}
|
||||||
|
|
||||||
// get_line returns a one-line string from stdin
|
// get_line returns a one-line string from stdin
|
||||||
|
@ -88,15 +88,6 @@ fn test_create_and_delete_folder() {
|
|||||||
assert folder_exists == false
|
assert folder_exists == false
|
||||||
}
|
}
|
||||||
|
|
||||||
fn test_dir() {
|
|
||||||
$if windows {
|
|
||||||
assert os.dir('C:\\a\\b\\c') == 'C:\\a\\b'
|
|
||||||
|
|
||||||
} $else {
|
|
||||||
assert os.dir('/var/tmp/foo') == '/var/tmp'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn walk_callback(file string) {
|
fn walk_callback(file string) {
|
||||||
if file == '.' || file == '..' {
|
if file == '.' || file == '..' {
|
||||||
return
|
return
|
||||||
|
@ -19,7 +19,7 @@ import sdl.ttf as ttf
|
|||||||
|
|
||||||
const (
|
const (
|
||||||
Title = 'tVintris'
|
Title = 'tVintris'
|
||||||
BASE = os.dir( os.realpath( os.executable() ) )
|
BASE = filepath.dir( os.realpath( os.executable() ) )
|
||||||
FontName = BASE + '/fonts/RobotoMono-Regular.ttf'
|
FontName = BASE + '/fonts/RobotoMono-Regular.ttf'
|
||||||
MusicName = BASE + '/sounds/TwintrisThosenine.mod'
|
MusicName = BASE + '/sounds/TwintrisThosenine.mod'
|
||||||
SndBlockName = BASE + '/sounds/block.wav'
|
SndBlockName = BASE + '/sounds/block.wav'
|
||||||
|
Loading…
Reference in New Issue
Block a user