Class: Shaml::MonoLoader
- Inherits:
-
Object
- Object
- Shaml::MonoLoader
- Defined in:
- lib/shaml/mono_load.rb
Instance Attribute Summary collapse
-
#is_unix ⇒ Object
readonly
Returns the value of attribute is_unix.
-
#mono_found ⇒ Object
readonly
Returns the value of attribute mono_found.
Instance Method Summary collapse
-
#create_init_script(init_script, name) ⇒ Object
create a file that will be executed before the interpreter starts.
-
#delete_init_script(init_script, name) ⇒ Object
remove the file.
-
#initialize ⇒ MonoLoader
constructor
A new instance of MonoLoader.
- #load_app(command, parameters = "") ⇒ Object
-
#load_csharp(init_script = nil, commands = "") ⇒ Object
run csharp with an optional initialization script.
-
#load_gsharp(init_script = nil, commands = "") ⇒ Object
run gsharp with an optional initialization script.
- #load_mono_app(command, parameters = "") ⇒ Object
Constructor Details
#initialize ⇒ MonoLoader
Returns a new instance of MonoLoader.
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/shaml/mono_load.rb', line 8 def initialize @mono_command = '/bin/mono' @mono_directory = '/usr' @mono_lib_directory = '/usr/lib' @csharp_command = '/mono/2.0/csharp.exe' @gsharp_command = '/gsharp/gsharp.exe' @config_dir = "#{ENV['HOME']}/.config" @init_script_name = 'shaml.cs' @mono_found = true @is_unix = true # get mono path for Windows if RbConfig::CONFIG['host_os'] =~ /mswin|windows|cygwin|mingw/i begin @is_unix = false require 'win32/registry' # Check in default location base = "Software\\Novell\\Mono\\" begin Win32::Registry::HKEY_LOCAL_MACHINE.open(base) do |reg| end # if running ruby 64-bit and mono 32-bit, change the registry search location rescue Win32::Registry::Error base = "Software\\Wow6432Node\\Novell\\Mono\\" end Win32::Registry::HKEY_LOCAL_MACHINE.open(base) do |reg| monoversion = reg.read_s("DefaultCLR") reg.open(monoversion) do |r| @mono_directory = r.read_s("SdkInstallRoot") @mono_lib_directory = r.read_s("FrameworkAssemblyDirectory") @mono_command = "\\bin\\mono" end end Win32::Registry::HKEY_CURRENT_USER.open("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders") do |reg| @config_dir = reg.("AppData") end rescue Exception => e STDERR.puts "Couldn't determine mono location under Windows!" STDERR.puts e.inspect @mono_found = false end else if !ENV['MONO_PREFIX'].nil? and !ENV['MONO_PREFIX'].empty? then @mono_directory = ENV['MONO_PREFIX'] @mono_lib_directory = File.join(@mono_directory,"lib") end end end |
Instance Attribute Details
#is_unix ⇒ Object (readonly)
Returns the value of attribute is_unix.
6 7 8 |
# File 'lib/shaml/mono_load.rb', line 6 def is_unix @is_unix end |
#mono_found ⇒ Object (readonly)
Returns the value of attribute mono_found.
6 7 8 |
# File 'lib/shaml/mono_load.rb', line 6 def mono_found @mono_found end |
Instance Method Details
#create_init_script(init_script, name) ⇒ Object
create a file that will be executed before the interpreter starts
58 59 60 61 62 63 64 65 66 67 |
# File 'lib/shaml/mono_load.rb', line 58 def create_init_script(init_script, name) if init_script then csconfig = File.join(@config_dir,name) FileUtils::mkdir_p(csconfig) csfile = File.join(csconfig,@init_script_name); File.open(csfile,"w+") do |f| f.write init_script end end end |
#delete_init_script(init_script, name) ⇒ Object
remove the file
70 71 72 73 74 75 76 |
# File 'lib/shaml/mono_load.rb', line 70 def delete_init_script(init_script, name) if init_script then csconfig = File.join(@config_dir,name) csfile = File.join(csconfig,@init_script_name); FileUtils::rm_rf(csfile) end end |
#load_app(command, parameters = "") ⇒ Object
102 103 104 105 |
# File 'lib/shaml/mono_load.rb', line 102 def load_app(command,parameters = "") cm = command system("\"#{File.join(@mono_directory,@mono_command)}\" \"#{cm}\" #{parameters}") end |
#load_csharp(init_script = nil, commands = "") ⇒ Object
run csharp with an optional initialization script
79 80 81 82 83 84 85 86 |
# File 'lib/shaml/mono_load.rb', line 79 def load_csharp(init_script = nil, commands = "") create_init_script(init_script,"csharp") puts "Mono executable: \"#{File.join(@mono_directory,@mono_command)}\"" cs = File.join(@mono_lib_directory,@csharp_command) puts "CSharp executable: \"#{cs}\"" system("\"#{File.join(@mono_directory,@mono_command)}\" \"#{cs}\" #{commands}") delete_init_script(init_script, "csharp") end |
#load_gsharp(init_script = nil, commands = "") ⇒ Object
run gsharp with an optional initialization script
89 90 91 92 93 94 95 96 |
# File 'lib/shaml/mono_load.rb', line 89 def load_gsharp(init_script = nil, commands = "") create_init_script(init_script,"gsharp") puts "Mono executable: \"#{File.join(@mono_directory,@mono_command)}\"" gs = File.join(@mono_lib_directory,@gsharp_command) puts "GSharp executable: \"#{gs}\"" system("\"#{File.join(@mono_directory,@mono_command)}\" \"#{gs}\" #{commands}") delete_init_script(init_script, "gsharp") end |
#load_mono_app(command, parameters = "") ⇒ Object
98 99 100 101 |
# File 'lib/shaml/mono_load.rb', line 98 def load_mono_app(command,parameters = "") cm = File.join(@mono_lib_directory,command) system("\"#{File.join(@mono_directory,@mono_command)}\" \"#{cm}\" #{parameters}") end |