Class: Shaml::MonoLoader

Inherits:
Object
  • Object
show all
Defined in:
lib/shaml/mono_load.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeMonoLoader

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.read_s_expand("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_unixObject (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_foundObject (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