class Skipjack::FSharpCompiler

Attributes

local_refs[W]
references[W]
resident[RW]
target[R]

Public Class Methods

new(*args) { |self| ... } click to toggle source
# File lib/skipjack/fsharp.rb, line 7
def initialize *args
  @args = *args
  self.resident = true #default value
  yield self if block_given?
end

Public Instance Methods

add_argument(arg) click to toggle source
# File lib/skipjack/fsharp.rb, line 39
def add_argument arg
  @added_arguments ||= []
  @added_arguments << arg
end
add_reference(ref, copy_local: false) click to toggle source
# 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) click to toggle source
# File lib/skipjack/fsharp.rb, line 78
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) click to toggle source
# File lib/skipjack/fsharp.rb, line 44
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

    target = self.target
    case File.extname(t.name) 
    when ".exe"
      target = :exe 
    when ".dll"
      target = :library 
    end unless target
    opts = []
    opts << "--out:#{t.name}"
    opts << "--target:#{target.to_s}"
    @added_arguments.each { |a| opts << a } if @added_arguments
    references.each { |r| opts << "--reference:#{r}" }
    if resident
      opts << "--resident"
    end

    dir = File.dirname(t.name)

    cmd = "#{compiler} #{opts.join(" ")} #{source_files.join(" ")}"
    puts cmd
    raise "Error executing command" unless Kernel.system cmd
  end
  file_task.enhance dependencies
end
create_task() click to toggle source
# File lib/skipjack/fsharp.rb, line 88
def create_task
  task = create_file_task *@args
  add_reference_dependencies(task)
  task
end
local_refs() click to toggle source
# File lib/skipjack/fsharp.rb, line 30
def local_refs
  @local_refs ||= []
end
references() click to toggle source
# File lib/skipjack/fsharp.rb, line 26
def references
  @references ||= []
end
source_files() click to toggle source
# File lib/skipjack/fsharp.rb, line 22
def source_files
  @source_files ||= []
end
source_files=(val) click to toggle source
# File lib/skipjack/fsharp.rb, line 18
def source_files=(val)
  @source_files = val
end
target=(val) click to toggle source
# File lib/skipjack/fsharp.rb, line 13
def target=(val)
  raise "Invalid target: #{val}" unless %w(exe winexe library module).include? val.to_s
  @target = val
end