rta: rename and document runtime_type.nit
[nit.git] / src / separate_options.nit
1 # module adding separate specification of opts to compiler
2
3 import mmloader
4 import compiling
5
6 # only to order correctly redefs of compile_separate_module
7 import native_interface
8
9 redef class ToolContext
10 # all ops precised in .ops files
11 var separate_options : OptionContext = new OptionContext
12 var opt_cc_lib_paths: OptionArray = new OptionArray("Path to libraries for C compiler", "--cc-lib-path")
13 var opt_cc_libs: OptionArray = new OptionArray("Name of library to use for C compiler", "--cc-lib-name")
14 var opt_cc_include_paths: OptionArray = new OptionArray("Path to .h files for C compiler", "--cc-header-path")
15
16 redef init
17 do
18 super
19
20 separate_options.add_option( opt_cc_lib_paths )
21 separate_options.add_option( opt_cc_libs )
22 separate_options.add_option( opt_cc_include_paths )
23 end
24
25 fun integrate_separate_options( options : String )
26 do
27 for line in options.split do
28 line = line.strip_extension( "\n" )
29 separate_options.parse( line.split_with( ' ' ) )
30 if separate_options.rest.length > 0 then
31 warning( null, "module {self} args file has unknown args: {separate_options.rest.join(", ")}" )
32 end
33 end
34
35 cc_lib_paths.append( opt_cc_lib_paths.value )
36 cc_libs.append( opt_cc_libs.value )
37 cc_include_paths.append( opt_cc_include_paths.value )
38 end
39 end
40
41 redef class MMSrcModule
42
43 redef fun compile_separate_module(cprogram)
44 do
45 super
46
47 # extract options from file
48 var options_path = "{location.file.filename}.args"
49 if options_path.file_exists then
50 var option_file = new IFStream.open( options_path )
51 var option_content = option_file.read_all
52 option_file.close
53
54 cprogram.program.tc.integrate_separate_options( option_content )
55 end
56 end
57 end