skipjack 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e4033894cd022ca99f6cc2bce186122bcc8365b9
4
- data.tar.gz: 4e9da2a6c2acb659f01d0d84398873566314aae4
3
+ metadata.gz: 346e360f1203eaf442ccdbc7fd11459aaf177401
4
+ data.tar.gz: e219ec7484e6a1d6360bbf1cd60abae841a600bc
5
5
  SHA512:
6
- metadata.gz: 5d5e1eacdb8c9bc0604befc9d049dad05a4934b7b0bd6a7f997a05c7aeaaad3aad3d765e250dbd2d0b4c69490737dff01d03a5edeca974dae511b01f99e3f97b
7
- data.tar.gz: 4566ed52a8e07a58d6311e5fefc9bd183fd57f7ef0272be38f6def7f1e478fbdd9fee0317ad927297d7c3b569e1cf1e570e9019d497105f86106f55d3810c0c5
6
+ metadata.gz: 8f6ff2ad0d53c0d85b118be1a4637fa80f25c2a2bbd3f33ce95f8ee076b6380044ed86ae6bb3b44af85a509273183edd7d29015c3b6adb10819b7bf9f8c53d48
7
+ data.tar.gz: c740d7eb3781a01e22127aadb5b683e5d7cf5748a29d9b845b48faede73a933cb66be2f187634230d66e3d9985c6de65b1f38d629c66ea1669493263a783ad0b
data/CHANGELOG ADDED
@@ -0,0 +1,2 @@
1
+ Version 0.0.2: Skip compilation if target is newer than sources
2
+ Version 0.0.1: Compile F# source files
@@ -2,6 +2,7 @@ module Skipjack
2
2
  class FSharpCompiler
3
3
  attr_reader :target
4
4
  attr_accessor :output_folder, :output_file
5
+ attr_writer :references
5
6
 
6
7
  def initialize *args
7
8
  @args = *args
@@ -21,20 +22,34 @@ module Skipjack
21
22
  @source_files ||= []
22
23
  end
23
24
 
24
- def create_task
25
- Rake::Task::define_task *@args do |t|
25
+ def references
26
+ @references ||= []
27
+ end
28
+
29
+ def create_file_task
30
+ output_file_name = output_folder ? "#{output_folder}/#{output_file}" : output_file
31
+ dependencies = source_files
32
+ file_task = Rake::FileTask::define_task output_file_name => dependencies do |t|
26
33
  if t.application.windows?
27
34
  compiler = "fsc"
28
35
  else
29
36
  compiler = "fsharpc"
30
37
  end
31
38
 
32
- out = output_folder ? "--out:#{output_folder}/#{output_file}" : "--out:#{output_file}"
39
+ out = "--out:#{output_file_name}"
33
40
  src = source_files.join(" ")
34
- cmd = "#{compiler} #{out} --target:#{target.to_s} #{src}"
41
+ refs = references.each {|r| r.prepend("--reference:") }
42
+ refs = refs.join(" ")
43
+ cmd = "#{compiler} #{refs} #{out} --target:#{target.to_s} #{src}"
35
44
  raise "Error executing command" unless Kernel.system cmd
36
45
  end
37
46
  end
47
+
48
+ def create_task
49
+ task = Rake::Task::define_task *@args
50
+ file_task = create_file_task
51
+ task.enhance [file_task]
52
+ end
38
53
  end
39
54
  end
40
55
 
@@ -1,3 +1,3 @@
1
1
  module Skipjack
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
data/skipjack.gemspec CHANGED
@@ -22,5 +22,6 @@ Gem::Specification.new do |spec|
22
22
  spec.add_development_dependency "rspec", "~> 3.1"
23
23
  spec.add_development_dependency "guard"
24
24
  spec.add_development_dependency "guard-rspec"
25
+ spec.add_development_dependency "fakefs"
25
26
  spec.add_dependency "rake"
26
27
  end
data/spec/helpers.rb CHANGED
@@ -5,7 +5,7 @@ module Helpers
5
5
  end
6
6
 
7
7
  def expect_system_call
8
- expect(Kernel).to receive(:system) do |args|
8
+ allow(Kernel).to receive(:system) do |args|
9
9
  result = yield args
10
10
  if result.nil? then
11
11
  true
@@ -29,6 +29,7 @@ module Helpers
29
29
  class CompilerOptions
30
30
  attr_accessor :executable, :target, :out
31
31
  attr_writer :source_files
32
+ attr_writer :references
32
33
 
33
34
  def initialize
34
35
  yield self if block_given?
@@ -37,6 +38,10 @@ module Helpers
37
38
  def source_files
38
39
  @source_files ||= []
39
40
  end
41
+
42
+ def references
43
+ @reference ||= []
44
+ end
40
45
  end
41
46
 
42
47
  def parse_cmd cmd
@@ -54,6 +59,10 @@ module Helpers
54
59
  c.out = m[1]
55
60
  end
56
61
 
62
+ cmd.scan(/--reference:([^ ]*)/) do |m|
63
+ c.references << m[0]
64
+ end
65
+
57
66
  c.source_files = args.select { |f| f[0] != '-' }
58
67
  end
59
68
  end
@@ -1,7 +1,10 @@
1
+ require 'fakefs/spec_helpers'
2
+
1
3
  describe 'fsharp' do
4
+ include FakeFS::SpecHelpers
5
+
2
6
  before :each do |example|
3
- @app = Rake::Application.new
4
- Rake.application = @app
7
+ @app = Rake.application = Rake::Application.new
5
8
 
6
9
  # mock if we are running windows or not
7
10
  windows = example.metadata[:windows]
@@ -25,6 +28,7 @@ describe 'fsharp' do
25
28
 
26
29
  let :options do
27
30
  invoke_fsc_task do |t|
31
+ t.output_file = "dummy.exe" # in case test doesn't set one up
28
32
  @setup.call(t) if @setup
29
33
  end
30
34
  @opts
@@ -42,6 +46,18 @@ describe 'fsharp' do
42
46
  end
43
47
  end
44
48
 
49
+ describe "--reference: argument" do
50
+ before do |ex|
51
+ @setup = lambda do |t|
52
+ t.references = ["ref1.dll", "ref2.dll"]
53
+ end
54
+ end
55
+
56
+ subject { options.references }
57
+
58
+ it { should eq ["ref1.dll", "ref2.dll"] }
59
+ end
60
+
45
61
  describe "--target: argument" do
46
62
  before do |ex|
47
63
  @setup = lambda do |t|
@@ -63,6 +79,8 @@ describe 'fsharp' do
63
79
  describe "source files" do
64
80
  it "contains the passed sources" do
65
81
  sources = ["source1.fs", "source2.fs"]
82
+ FileUtils.touch "source1.fs"
83
+ FileUtils.touch "source2.fs"
66
84
  @setup = lambda do |t|
67
85
  t.source_files = sources
68
86
  end
@@ -88,6 +106,33 @@ describe 'fsharp' do
88
106
  expect(options.out).to eq("p.exe")
89
107
  end
90
108
  end
109
+
110
+ describe "build optimization" do
111
+ context "build output is older than source files" do
112
+ it "calls the compiler", :focus => true do
113
+ FileUtils.touch('./p.exe')
114
+ FileUtils.touch('s.fs')
115
+ @setup = lambda do |t|
116
+ t.target = :exe
117
+ t.output_file = "p.exe"
118
+ t.source_files = ["s.fs"]
119
+ end
120
+ expect(options).to_not be_nil
121
+ end
122
+ end
123
+ context "build output is newer than source files" do
124
+ it "does not call the compiler", :focus => true do
125
+ FileUtils.touch('s.fs')
126
+ FileUtils.touch('./p.exe')
127
+ @setup = lambda do |t|
128
+ t.target = :exe
129
+ t.output_file = "p.exe"
130
+ t.source_files = ["s.fs"]
131
+ end
132
+ expect(options).to be_nil
133
+ end
134
+ end
135
+ end
91
136
  end
92
137
 
93
138
  describe "target type" do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: skipjack
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter Strøiman
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-01-25 00:00:00.000000000 Z
11
+ date: 2015-10-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - '>='
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: fakefs
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: rake
71
85
  requirement: !ruby/object:Gem::Requirement
@@ -91,6 +105,7 @@ files:
91
105
  - .gitignore
92
106
  - .rspec
93
107
  - .travis.yml
108
+ - CHANGELOG
94
109
  - Gemfile
95
110
  - Guardfile
96
111
  - LICENSE