pref: support _default.c.v , overridable by _platform.c.v

pull/7534/head
Delyan Angelov 2020-12-24 11:53:40 +02:00
parent f7787ff0d7
commit d1223851a2
1 changed files with 59 additions and 1 deletions

View File

@ -6,6 +6,7 @@ pub fn (prefs &Preferences) should_compile_filtered_files(dir string, files_ []s
mut res := []string{}
mut files := files_.clone()
files.sort()
mut all_v_files := []string{}
for file in files {
if !file.ends_with('.v') && !file.ends_with('.vh') {
continue
@ -32,8 +33,65 @@ pub fn (prefs &Preferences) should_compile_filtered_files(dir string, files_ []s
continue
}
}
res << os.join_path(dir, file)
all_v_files << os.join_path(dir, file)
}
//
mut defaults := []string{}
mut fnames_no_postfixes := map[string][]string{}
for file in all_v_files {
if file.contains('default.c.v') {
defaults << file
} else {
res << file
no_postfix_key := fname_without_platform_postfix(file)
mut candidates := fnames_no_postfixes[no_postfix_key]
candidates << file
fnames_no_postfixes[no_postfix_key] = candidates
}
}
for file in defaults {
no_postfix_key := fname_without_platform_postfix(file)
if no_postfix_key in fnames_no_postfixes {
if prefs.is_verbose {
println('>>> should_compile_filtered_files: skipping _default.c.v file $file ; the specialized versions are: ${fnames_no_postfixes[no_postfix_key]}')
}
continue
}
res << file
}
if prefs.is_verbose {
println('>>> should_compile_filtered_files: res: $res')
}
return res
}
fn fname_without_platform_postfix(file string) string {
res := file.replace_each([
'default.c.v',
'_',
'nix.c.v',
'_',
'windows.c.v',
'_',
'linux.c.v',
'_',
'darwin.c.v',
'_',
'macos.c.v',
'_',
'android.c.v',
'_',
'freebsd.c.v',
'_',
'netbsd.c.v',
'_',
'dragonfly.c.v',
'_',
'solaris.c.v',
'_',
'x64.v',
'_',
])
return res
}