Class: Rant::CSharp::BaseCompilerAdapter
- Defined in:
- lib/rant/csharp/base_compiler_adapter.rb
Direct Known Subclasses
Instance Attribute Summary collapse
-
#bin ⇒ Object
Returns the value of attribute bin.
-
#switch_map ⇒ Object
Returns the value of attribute switch_map.
Instance Method Summary collapse
- #argument_prefix ⇒ Object
- #boolean_argument(arg, on) ⇒ Object
- #cmd(target, cs_args, context) ⇒ Object
-
#guess_target(outfile) ⇒ Object
Try to automatically guess the type of output file based on the extension.
-
#initialize(bin = "") ⇒ BaseCompilerAdapter
constructor
A new instance of BaseCompilerAdapter.
-
#map_arg(arg) ⇒ Object
Map rant arguments to compiler arguments.
-
#map_target(target) ⇒ Object
Allows subclasses to override default target names.
- #outfile(target) ⇒ Object
- #string_argument(arg, value) ⇒ Object
Constructor Details
#initialize(bin = "") ⇒ BaseCompilerAdapter
Returns a new instance of BaseCompilerAdapter.
44 45 46 47 48 49 |
# File 'lib/rant/csharp/base_compiler_adapter.rb', line 44 def initialize bin = "" @bin = bin @switch_map = {} raise Exception.new("Must specify an executable") if !@bin || @bin.length == 0 end |
Instance Attribute Details
#bin ⇒ Object
Returns the value of attribute bin.
41 42 43 |
# File 'lib/rant/csharp/base_compiler_adapter.rb', line 41 def bin @bin end |
#switch_map ⇒ Object
Returns the value of attribute switch_map.
42 43 44 |
# File 'lib/rant/csharp/base_compiler_adapter.rb', line 42 def switch_map @switch_map end |
Instance Method Details
#argument_prefix ⇒ Object
97 98 99 |
# File 'lib/rant/csharp/base_compiler_adapter.rb', line 97 def argument_prefix "" end |
#boolean_argument(arg, on) ⇒ Object
82 83 84 85 86 |
# File 'lib/rant/csharp/base_compiler_adapter.rb', line 82 def boolean_argument arg, on switch = map_arg(arg) ret = "#{self.argument_prefix}#{switch}" ret += on ? "" : "-" end |
#cmd(target, cs_args, context) ⇒ Object
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/rant/csharp/base_compiler_adapter.rb', line 51 def cmd target, cs_args, context @context = context if !target || target.length == 0 raise Exception.new("Target must be specified and have a length " + "greater than 0") end # Generic argument processing args = [] sources = cs_args.delete(:sources) cs_args[:target] ||= guess_target(target) cs_args.each_key do |key| args.push(cs_args[key].to_cs_arg(key, self)) end src_list = sources.to_cmd_array(context) ([bin, outfile(target)] + args.flatten + src_list).join(' ') end |
#guess_target(outfile) ⇒ Object
Try to automatically guess the type of output file based on the extension
103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 |
# File 'lib/rant/csharp/base_compiler_adapter.rb', line 103 def guess_target outfile target = "library" ext = outfile.match(/\.([^\.]+)$/) ext = ext[1] if ext if ext case ext.downcase when "netmodule" target = map_target("module") when "exe" target = map_target("winexe") end end target end |
#map_arg(arg) ⇒ Object
Map rant arguments to compiler arguments
74 75 76 |
# File 'lib/rant/csharp/base_compiler_adapter.rb', line 74 def map_arg arg switch_map[arg] ? switch_map[arg] : arg end |
#map_target(target) ⇒ Object
Allows subclasses to override default target names
121 122 123 |
# File 'lib/rant/csharp/base_compiler_adapter.rb', line 121 def map_target target target end |
#outfile(target) ⇒ Object
78 79 80 |
# File 'lib/rant/csharp/base_compiler_adapter.rb', line 78 def outfile target string_argument "out", target end |
#string_argument(arg, value) ⇒ Object
88 89 90 91 92 93 94 95 |
# File 'lib/rant/csharp/base_compiler_adapter.rb', line 88 def string_argument arg, value switch = map_arg(arg) # Assume all string arguments except target are # files value = @context.sys.sp(value) if arg != :target "#{self.argument_prefix}#{switch}:#{value}" end |