Class: Skipjack::FSharpCompiler

Inherits:
Object
  • Object
show all
Defined in:
lib/skipjack/fsharp.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(*args) {|_self| ... } ⇒ FSharpCompiler

Returns a new instance of FSharpCompiler.

Yields:

  • (_self)

Yield Parameters:



7
8
9
10
11
# File 'lib/skipjack/fsharp.rb', line 7

def initialize *args
  @args = *args
  self.resident = true #default value
  yield self if block_given?
end

Instance Attribute Details

#local_refsObject



30
31
32
# File 'lib/skipjack/fsharp.rb', line 30

def local_refs
  @local_refs ||= []
end

#referencesObject



26
27
28
# File 'lib/skipjack/fsharp.rb', line 26

def references
  @references ||= []
end

#residentObject

Returns the value of attribute resident.



5
6
7
# File 'lib/skipjack/fsharp.rb', line 5

def resident
  @resident
end

#targetObject

Returns the value of attribute target.



3
4
5
# File 'lib/skipjack/fsharp.rb', line 3

def target
  @target
end

Instance Method Details

#add_reference(ref, copy_local: false) ⇒ Object



34
35
36
37
# File 'lib/skipjack/fsharp.rb', line 34

def add_reference(ref, copy_local: false)
  references << ref
  local_refs << ref if copy_local
end

#add_reference_dependencies(task) ⇒ Object



64
65
66
67
68
69
70
71
72
# File 'lib/skipjack/fsharp.rb', line 64

def add_reference_dependencies(task)
  local_refs.each do |r|
    dest = File.join(File.dirname(task.name), File.basename(r))
    reference_task = Rake::FileTask::define_task dest => [r] do |t|
      FileUtils.cp(t.prerequisites[0], t.name)
    end
    task.enhance [reference_task] unless dest == r
  end
end

#create_file_task(*args) ⇒ Object



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/skipjack/fsharp.rb', line 39

def create_file_task *args
  dependencies = source_files
  file_task = Rake::FileTask::define_task *args do |t|
    if t.application.windows?
      compiler = "fsc"
    else
      compiler = "fsharpc"
    end

    opts = []
    opts << "--out:#{t.name}"
    opts << "--target:#{target.to_s}"
    references.each { |r| opts << "--reference:#{r}" }
    if resident
      opts << "--resident"
    end

    dir = File.dirname(t.name)

    cmd = "#{compiler} #{opts.join(" ")} #{source_files.join(" ")}"
    raise "Error executing command" unless Kernel.system cmd
  end
  file_task.enhance dependencies
end

#create_taskObject



74
75
76
77
78
# File 'lib/skipjack/fsharp.rb', line 74

def create_task
  task = create_file_task *@args
  add_reference_dependencies(task)
  task
end

#source_filesObject



22
23
24
# File 'lib/skipjack/fsharp.rb', line 22

def source_files
  @source_files ||= []
end

#source_files=(val) ⇒ Object



18
19
20
# File 'lib/skipjack/fsharp.rb', line 18

def source_files=(val)
  @source_files = val
end