pref: add support for `-dump-files -` and for `-dump-modules -`

Delyan Angelov 2022-05-23 19:48:27 +03:00 committed by Jef Roosens
parent 461e50fb48
commit 73e421cd95
Signed by: Jef Roosens
GPG Key ID: B75D4F293C7052DB
5 changed files with 49 additions and 12 deletions

View File

@ -239,7 +239,15 @@ see also `v help build`.
-dump-c-flags file.txt -dump-c-flags file.txt
Write all C flags into `file.txt`, one flag per line. Write all C flags into `file.txt`, one flag per line.
If `file.txt` is `-`, then write the flags to stdout, one flag per line. If `file.txt` is `-`, write to stdout instead.
-dump-modules file.txt
Write all module names used by the program in `file.txt`, one module per line.
If `file.txt` is `-`, write to stdout instead.
-dump-files file.txt
Write all used V file paths used by the program in `file.txt`, one module per line.
If `file.txt` is `-`, write to stdout instead.
-no-rsp -no-rsp
By default, V passes all C compiler options to the backend C compiler By default, V passes all C compiler options to the backend C compiler

View File

@ -215,6 +215,9 @@ pub fn (mut b Builder) parse_imports() {
} }
exit(0) exit(0)
} }
if b.pref.dump_files != '' {
b.dump_files(b.parsed_files.map(it.path))
}
b.rebuild_modules() b.rebuild_modules()
} }
@ -241,6 +244,7 @@ pub fn (mut b Builder) resolve_deps() {
for node in deps_resolved.nodes { for node in deps_resolved.nodes {
mods << node.name mods << node.name
} }
b.dump_modules(mods)
if b.pref.is_verbose { if b.pref.is_verbose {
eprintln('------ imported modules: ------') eprintln('------ imported modules: ------')
eprintln(mods.str()) eprintln(mods.str())

View File

@ -483,17 +483,6 @@ fn (mut v Builder) setup_output_name() {
v.ccoptions.o_args << '-o "$v.pref.out_name"' v.ccoptions.o_args << '-o "$v.pref.out_name"'
} }
fn (mut v Builder) dump_c_options(all_args []string) {
if v.pref.dump_c_flags != '' {
non_empty_args := all_args.filter(it != '').join('\n') + '\n'
if v.pref.dump_c_flags == '-' {
print(non_empty_args)
} else {
os.write_file(v.pref.dump_c_flags, non_empty_args) or { panic(err) }
}
}
}
pub fn (mut v Builder) cc() { pub fn (mut v Builder) cc() {
if os.executable().contains('vfmt') { if os.executable().contains('vfmt') {
return return

View File

@ -0,0 +1,26 @@
module builder
import os
pub fn (b &Builder) dump_c_options(all_args []string) {
dump_list(b.pref.dump_c_flags, all_args)
}
pub fn (b &Builder) dump_modules(mods []string) {
dump_list(b.pref.dump_modules, mods)
}
pub fn (b &Builder) dump_files(files []string) {
dump_list(b.pref.dump_files, files)
}
fn dump_list(file_path string, list []string) {
if file_path != '' {
content := list.filter(it != '').join('\n') + '\n'
if file_path == '-' {
print(content)
} else {
os.write_file(file_path, content) or { panic(err) }
}
}
}

View File

@ -139,6 +139,8 @@ pub mut:
show_callgraph bool // -show-callgraph, print the program callgraph, in a Graphviz DOT format to stdout show_callgraph bool // -show-callgraph, print the program callgraph, in a Graphviz DOT format to stdout
show_depgraph bool // -show-depgraph, print the program module dependency graph, in a Graphviz DOT format to stdout show_depgraph bool // -show-depgraph, print the program module dependency graph, in a Graphviz DOT format to stdout
dump_c_flags string // `-dump-c-flags file.txt` - let V store all C flags, passed to the backend C compiler in `file.txt`, one C flag/value per line. dump_c_flags string // `-dump-c-flags file.txt` - let V store all C flags, passed to the backend C compiler in `file.txt`, one C flag/value per line.
dump_modules string // `-dump-modules modules.txt` - let V store all V modules, that were used by the compiled program in `modules.txt`, one module per line.
dump_files string // `-dump-files files.txt` - let V store all V or .template file paths, that were used by the compiled program in `files.txt`, one path per line.
use_cache bool // when set, use cached modules to speed up subsequent compilations, at the cost of slower initial ones (while the modules are cached) use_cache bool // when set, use cached modules to speed up subsequent compilations, at the cost of slower initial ones (while the modules are cached)
retry_compilation bool = true // retry the compilation with another C compiler, if tcc fails. retry_compilation bool = true // retry the compilation with another C compiler, if tcc fails.
// TODO Convert this into a []string // TODO Convert this into a []string
@ -528,6 +530,14 @@ pub fn parse_args_and_show_errors(known_external_commands []string, args []strin
res.dump_c_flags = cmdline.option(current_args, arg, '-') res.dump_c_flags = cmdline.option(current_args, arg, '-')
i++ i++
} }
'-dump-modules' {
res.dump_modules = cmdline.option(current_args, arg, '-')
i++
}
'-dump-files' {
res.dump_files = cmdline.option(current_args, arg, '-')
i++
}
'-experimental' { '-experimental' {
res.experimental = true res.experimental = true
} }