nitc: move line coloration to Location
[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 separate_options.parse( options.split_with( ' ' ) )
28 if separate_options.rest.length > 0 then
29 warning( null, "module {self} args file has unknown args: {separate_options.rest.join(", ")}" )
30 end
31
32 cc_lib_paths.append( opt_cc_lib_paths.value )
33 cc_libs.append( opt_cc_libs.value )
34 cc_include_paths.append( opt_cc_include_paths.value )
35 end
36 end
37
38 redef class MMSrcModule
39
40 redef fun compile_separate_module(cprogram)
41 do
42 super
43
44 # extract options from file
45 var options_path = "{location.file.filename}.args"
46 if options_path.file_exists then
47 var option_file = new IFStream.open( options_path )
48 var option_content = option_file.read_all
49 option_file.close
50
51 cprogram.program.tc.integrate_separate_options( option_content )
52 end
53 end
54 end