rake-builder 0.9.2 → 0.10.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 60c1b4473a51b3dea752db5616d35f75485f24d9
4
+ data.tar.gz: f5028bf5de9235c3c68a4f0d270160d5e68fad9d
5
+ SHA512:
6
+ metadata.gz: 2e2c8faae223acb383fba9cc1727f76eb7c7b0bec433cbad9ab0d1caf2c1a117b0c5c6f810b8ff1c8acd1506b97da746bfd58cc2b6ec1e79805b985a143150ac
7
+ data.tar.gz: 6ffbfbeadee2ba86245542b14e13518dc364183b9cb7b8aa8d4f25d4b15a1daaeba4e22163143964be56902f84c4396033b072570883b36a57e99b94376a1379
data/README.md CHANGED
@@ -1,3 +1,5 @@
1
+ [![Build Status](https://secure.travis-ci.org/joeyates/rake-builder.png)][Continuous Integration]
2
+
1
3
  rake-builder
2
4
  ============
3
5
 
@@ -10,6 +12,7 @@ rake-builder
10
12
  [Source code]: http://github.com/joeyates/rake-builder "Source code at GitHub"
11
13
  [Documentation]: http://rdoc.info/projects/joeyates/rake-builder "Documentation at Rubydoc.info"
12
14
  [Rubygem]: http://rubygems.org/gems/rake-builder "Ruby gem at rubygems.org"
15
+ [Continuous Integration]: http://travis-ci.org/joeyates/rake-builder "Build status by Travis-CI"
13
16
 
14
17
  Hello World! Example
15
18
  ====================
@@ -122,6 +125,16 @@ If you install a static library, your headers will also be installed.
122
125
  Ensure that you use file globs, e.g. './include/**/*.h',
123
126
  as these will ensure that your headers are installed in the correct subdirectories.
124
127
 
128
+ Problem Resolution
129
+ ------------------
130
+
131
+ If you project does not build, use Rake's `--trace` option to get more
132
+ information about what's going wrong:
133
+
134
+ ```shell
135
+ $ rake --trace
136
+ ```
137
+
125
138
  Project
126
139
  =======
127
140
 
@@ -2,8 +2,8 @@ module Rake
2
2
  class Builder
3
3
  module VERSION #:nodoc:
4
4
  MAJOR = 0
5
- MINOR = 9
6
- TINY = 2
5
+ MINOR = 10
6
+ TINY = 1
7
7
 
8
8
  STRING = [MAJOR, MINOR, TINY].join('.')
9
9
  end
@@ -28,7 +28,7 @@ module Rake
28
28
 
29
29
  def needed?
30
30
  return true if not File.exist?(self.name)
31
- @timestamp = File.stat(self.name).mtime if @timestamp.nil?
31
+ @timestamp ||= File.stat(self.name).mtime
32
32
  prerequisites_needed?
33
33
  end
34
34
 
@@ -52,9 +52,7 @@ module Rake
52
52
 
53
53
  def needed?
54
54
  return true if not File.directory?(self.path)
55
- if @timestamp.nil?
56
- @timestamp = File.stat(self.path).mtime
57
- end
55
+ @timestamp ||= File.stat(self.path).mtime
58
56
  prerequisites_needed?
59
57
  end
60
58
 
@@ -10,18 +10,11 @@ describe Compiler::Base do
10
10
  subject { Compiler::Base.new }
11
11
 
12
12
  context '#include_paths' do
13
- before do
14
- File.stub(:exist?).
15
- with('/opt/local/include/foo/bar.h').
16
- and_return(false)
17
- end
13
+ let(:exists) { false }
18
14
 
19
- it 'checks extra paths' do
20
- File.should_receive(:exist?).
21
- with('/opt/local/include/foo/bar.h').
22
- and_return(true)
23
-
24
- subject.include_paths(['foo/bar.h'])
15
+ before do
16
+ allow(File).to receive(:exist).
17
+ with('/opt/local/include/foo/bar.h') { exists }
25
18
  end
26
19
 
27
20
  it 'throws an error is the headers are not found' do
@@ -88,12 +81,12 @@ COLLECT_GCC_OPTIONS='-v' '-E' '-mtune=generic' '-march=x86-64'
88
81
  EOT
89
82
  end
90
83
 
91
- before { subject.stub(:`).with(/gcc/).and_return(gcc_output) }
84
+ before { allow(subject).to receive(:`).with(/gcc/) { gcc_output } }
92
85
 
93
86
  it 'calls gcc' do
94
- subject.should_receive(:`).with(/gcc/).and_return(gcc_output)
95
-
96
87
  subject.default_include_paths('c++')
88
+
89
+ expect(subject).to have_received(:`).with(/gcc/)
97
90
  end
98
91
 
99
92
  it 'parses gcc output' do
@@ -111,12 +104,12 @@ makedepend: warning: main.cpp (reading main.h, line 4): cannot find include fil
111
104
  EOT
112
105
  end
113
106
 
114
- before { subject.stub(:`).with(/makedepend/).and_return(makedepend_output) }
107
+ before { allow(subject).to receive(:`).with(/makedepend/) { makedepend_output } }
115
108
 
116
109
  it 'calls makedepend' do
117
- subject.should_receive(:`).with(/makedepend/).and_return(makedepend_output)
118
-
119
110
  subject.missing_headers(['/foo'], ['bar.cpp'])
111
+
112
+ expect(subject).to have_received(:`).with(/makedepend/)
120
113
  end
121
114
 
122
115
  it 'returns missing headers' do
@@ -1,116 +1,104 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Rake::Builder::Autoconf::Version do
4
+ let(:exists) { true }
5
+ let(:file_content) { '1.2.3' }
4
6
  before do
5
- File.stub(:exist? => true)
6
- File.stub(:read => '1.2.3')
7
+ allow(File).to receive(:exist?).with('VERSION') { exists }
8
+ allow(File).to receive(:read).with('VERSION') { file_content }
7
9
  end
10
+ let(:params) { [] }
11
+ let(:parameter_version) { '4.5.6' }
12
+
13
+ subject { described_class.new(*params) }
8
14
 
9
15
  context '.new' do
10
16
  context 'with parameter' do
11
17
  it 'fails if the version parameter is not nn.nn.nn' do
12
18
  expect {
13
- Rake::Builder::Autoconf::Version.new('hello')
19
+ described_class.new('hello')
14
20
  }.to raise_error(RuntimeError, /badly formatted/)
15
21
  end
16
22
  end
17
23
 
18
24
  context 'without parameter' do
19
25
  it 'succeeds' do
20
- Rake::Builder::Autoconf::Version.new
26
+ described_class.new
21
27
  end
22
28
  end
23
29
 
24
- context 'VERSION file' do
25
- it 'checks for a the file' do
26
- File.should_receive(:exist?).
27
- with('VERSION').
28
- and_return(false)
29
-
30
- Rake::Builder::Autoconf::Version.new
31
- end
32
-
33
- it 'loads the file' do
34
- File.should_receive(:exist?).
35
- with('VERSION').
36
- and_return(true)
37
- File.should_receive(:read).
38
- with('VERSION').
39
- and_return('1.2.3')
40
-
41
- Rake::Builder::Autoconf::Version.new
42
- end
43
-
44
- it 'fails if the version is badly formed' do
45
- File.should_receive(:read).
46
- with('VERSION').
47
- and_return('bad')
30
+ context 'if the version is badly formed' do
31
+ let(:file_content) { 'bad' }
48
32
 
33
+ it 'fails' do
49
34
  expect {
50
- Rake::Builder::Autoconf::Version.new
35
+ described_class.new
51
36
  }.to raise_error(RuntimeError, /file.*?version.*?badly formatted/)
52
37
  end
53
38
  end
54
39
  end
55
40
 
56
41
  context '#decide' do
57
- let(:with_parameter) { Rake::Builder::Autoconf::Version.new('4.5.6') }
58
- let(:without_parameter) { Rake::Builder::Autoconf::Version.new }
42
+ let(:file) { double(File, write: nil) }
59
43
 
60
- before { File.stub(:open).with('VERSION', 'w') }
44
+ before do
45
+ allow(File).to receive(:open).with('VERSION', 'w').and_yield(file)
46
+ end
61
47
 
62
- context 'file version is nil' do
63
- before { File.stub(:exist? => false) }
48
+ context 'disk file is absent' do
49
+ let(:exists) { false }
64
50
 
65
51
  context 'parameter is nil' do
66
52
  it 'raises an error' do
67
53
  expect {
68
- without_parameter.decide
54
+ subject.decide
69
55
  }.to raise_error(RuntimeError, /Please do one of the following/)
70
56
  end
71
57
  end
72
58
 
73
59
  context 'parameter not nil' do
60
+ let(:params) { [parameter_version] }
61
+
74
62
  it 'saves the version' do
75
- File.should_receive(:open).with('VERSION', 'w')
63
+ subject.decide
76
64
 
77
- with_parameter.decide
65
+ expect(file).to have_received(:write).with(parameter_version + "\n")
78
66
  end
79
67
 
80
68
  it 'returns the parameter version' do
81
- expect(with_parameter.decide).to eq('4.5.6')
69
+ expect(subject.decide).to eq(parameter_version)
82
70
  end
83
71
  end
84
72
  end
85
73
 
86
- context 'file version not nil' do
87
- before do
88
- File.stub(:exist? => true)
89
- File.stub(:read).with('VERSION').and_return("6.6.6\n")
90
- end
74
+ context 'disk file exists' do
75
+ let(:exists) { true }
91
76
 
92
- context 'parameter is nil' do
93
- it 'returns the file version' do
94
- expect(without_parameter.decide).to eq('6.6.6')
77
+ context 'without parameters' do
78
+ it 'returns the file version from disk' do
79
+ expect(subject.decide).to eq(file_content)
95
80
  end
96
81
  end
97
82
 
98
83
  context 'parameter not nil' do
99
- it 'fails if the two versions differ'do
100
- File.should_receive(:read).with('VERSION').and_return("6.6.6\n")
101
-
102
- expect {
103
- with_parameter.decide
104
- }.to raise_error(RuntimeError, /parameter.*?is different to.*?VERSION/)
84
+ context 'if the two versions differ'do
85
+ let(:params) { [parameter_version] }
86
+
87
+ it 'fails' do
88
+ expect {
89
+ subject.decide
90
+ }.to raise_error(RuntimeError, /parameter.*?is different to.*?VERSION/)
91
+ end
105
92
  end
106
93
 
107
- it 'returns the version' do
108
- File.should_receive(:read).with('VERSION').and_return("4.5.6\n")
94
+ context 'if the two versions are the same' do
95
+ let(:params) { [file_content] }
109
96
 
110
- expect(with_parameter.decide).to eq('4.5.6')
97
+ it 'returns the version' do
98
+ expect(subject.decide).to eq(file_content)
99
+ end
111
100
  end
112
101
  end
113
102
  end
114
103
  end
115
104
  end
116
-
@@ -32,21 +32,16 @@ describe Rake::Builder::ConfigureAc do
32
32
  end
33
33
 
34
34
  context '#save' do
35
- it 'creates the file' do
36
- File.should_receive(:open).with('configure.ac', 'w')
35
+ let(:file) { double(File, write: nil) }
37
36
 
38
- subject.save
37
+ before do
38
+ allow(File).to receive(:open).with('configure.ac', 'w').and_yield(file)
39
39
  end
40
40
 
41
41
  it 'saves the content' do
42
- file = stub('File')
43
- File.stub(:open).with('configure.ac', 'w') do |&block|
44
- block.call file
45
- end
46
-
47
- file.should_receive(:write).with(/AC_PREREQ\(2\.61\)/)
48
-
49
42
  subject.save
43
+
44
+ expect(file).to have_received(:write).with(/AC_PREREQ\(2\.61\)/)
50
45
  end
51
46
  end
52
47
  end
@@ -2,99 +2,110 @@ require 'spec_helper'
2
2
 
3
3
  describe Rake::Builder::Installer do
4
4
  let(:destination_path) { '/destination/path' }
5
- let(:destination_pathname) { '/destination/path/install' }
5
+ let(:destination_pathname) { File.join(destination_path, 'install') }
6
+ let(:destination_path_writable) { true }
7
+
8
+ before do
9
+ allow(File).to receive(:writable?).with(destination_path) { destination_path_writable }
10
+ end
6
11
 
7
12
  context '#install' do
8
13
  let(:file_to_install) { '/file/to/install' }
14
+ let(:file_to_install_exists) { true }
15
+ let(:destination_path_exists) { true }
16
+ let(:destination_path_directory) { true }
17
+ let(:destination_pathname_file) { true }
18
+ let(:destination_pathname_writable) { true }
9
19
 
10
20
  before do
11
- File.stub(:exist?).with(file_to_install).and_return(true)
12
- File.stub(:exist?).with(destination_path).and_return(true)
13
- File.stub(:directory?).with(destination_path).and_return(true)
14
- File.stub(:writable?).with(destination_path).and_return(true)
15
- File.stub(:file?).with(destination_pathname).and_return(false)
16
- File.stub(:writable?).with(destination_pathname).and_return(true)
17
- FileUtils.stub(:copy_file).with(file_to_install, destination_path)
21
+ allow(File).to receive(:exist?).with(file_to_install) { file_to_install_exists }
22
+ allow(File).to receive(:exist?).with(destination_path) { destination_path_exists }
23
+ allow(File).to receive(:directory?).with(destination_path) { destination_path_directory }
24
+ allow(File).to receive(:file?).with(destination_pathname) { destination_pathname_file }
25
+ allow(File).to receive(:writable?).with(destination_pathname) { destination_pathname_writable }
26
+ allow(FileUtils).to receive(:copy_file).with(file_to_install, destination_path)
18
27
  end
19
28
 
20
- it 'checks the source exists' do
21
- File.should_receive(:exist?).with(file_to_install).and_return(true)
29
+ context 'if the source does not exist' do
30
+ let(:file_to_install_exists) { false }
22
31
 
23
- subject.install file_to_install, destination_path
32
+ it 'fails' do
33
+ expect {
34
+ subject.install file_to_install, destination_path
35
+ }.to raise_error(RuntimeError, /does not exist/)
36
+ end
24
37
  end
25
38
 
26
- it 'fails if the source does not exist' do
27
- File.stub(:exist?).with(file_to_install).and_return(false)
39
+ context 'if the destination directory does not exist' do
40
+ let(:destination_path_exists) { false }
28
41
 
29
- expect {
30
- subject.install file_to_install, destination_path
31
- }.to raise_error(RuntimeError, /does not exist/)
42
+ it 'fails' do
43
+ expect {
44
+ subject.install file_to_install, destination_path
45
+ }.to raise_error(RuntimeError, /does not exist/)
46
+ end
32
47
  end
33
48
 
34
- it 'checks the destination directory exists' do
35
- File.should_receive(:exist?).with(destination_path).and_return(false)
49
+ context 'if the destination is not a directory' do
50
+ let(:destination_path_directory) { false }
36
51
 
37
- expect {
38
- subject.install file_to_install, destination_path
39
- }.to raise_error(RuntimeError, /does not exist/)
52
+ it 'fails' do
53
+ expect {
54
+ subject.install file_to_install, destination_path
55
+ }.to raise_error(RuntimeError, /is not a directory/)
56
+ end
40
57
  end
41
58
 
42
- it 'checks the destination is a directory' do
43
- File.should_receive(:directory?).with(destination_path).and_return(false)
59
+ context 'if it cannot overwrite an existing destination file' do
60
+ let(:destination_pathname_file) { true }
61
+ let(:destination_pathname_writable) { false }
44
62
 
45
- expect {
46
- subject.install file_to_install, destination_path
47
- }.to raise_error(RuntimeError, /is not a directory/)
48
- end
49
-
50
- it 'check it can overwrite an existing destination file' do
51
- File.stub(:file?).with(destination_pathname).and_return(true)
52
- File.stub(:writable?).with(destination_pathname).and_return(false)
53
-
54
- expect {
55
- subject.install file_to_install, destination_path
56
- }.to raise_error(RuntimeError, /cannot be overwritten/)
63
+ it 'fails' do
64
+ expect {
65
+ subject.install file_to_install, destination_path
66
+ }.to raise_error(RuntimeError, /cannot be overwritten/)
67
+ end
57
68
  end
58
69
 
59
70
  it 'copies the file to the destination' do
60
- FileUtils.should_receive(:copy_file).with(file_to_install, destination_path)
61
-
62
71
  subject.install file_to_install, destination_path
72
+
73
+ expect(FileUtils).to have_received(:copy_file).with(file_to_install, destination_path)
63
74
  end
64
75
  end
65
76
 
66
77
  context '#uninstall' do
78
+ let(:destination_pathname_exist) { true }
79
+
67
80
  before do
68
- File.stub(:exist?).with(destination_pathname).and_return(true)
69
- File.stub(:writable?).with(destination_path).and_return(true)
70
- File.stub(:unlink).with(destination_pathname)
81
+ allow(File).to receive(:exist?).with(destination_pathname) { destination_pathname_exist }
82
+ allow(File).to receive(:unlink).with(destination_pathname)
71
83
  end
72
84
 
73
- it 'checks if the file exists' do
74
- File.should_receive(:exist?).with(destination_pathname).and_return(true)
85
+ context 'if the file does not exist' do
86
+ let(:destination_pathname_exist) { false }
75
87
 
76
- subject.uninstall destination_pathname
77
- end
78
-
79
- it 'does nothing if the file does not exist' do
80
- File.should_receive(:exist?).with(destination_pathname).and_return(false)
81
- File.should_not_receive(:unlink)
88
+ it 'does nothing' do
89
+ subject.uninstall destination_pathname
82
90
 
83
- subject.uninstall destination_pathname
91
+ expect(File).to_not have_received(:unlink)
92
+ end
84
93
  end
85
94
 
86
- it 'fails if the directory is not writable' do
87
- File.should_receive(:writable?).with(destination_path).and_return(false)
95
+ context 'if the directory is not writable' do
96
+ let(:destination_path_writable) { false }
88
97
 
89
- expect {
90
- subject.uninstall destination_pathname
91
- }.to raise_error(RuntimeError, /directory.*?writable/)
98
+ it 'fails' do
99
+ expect {
100
+ subject.uninstall destination_pathname
101
+ }.to raise_error(RuntimeError, /directory.*?writable/)
102
+ end
92
103
  end
93
104
 
94
105
  it 'deletes the file' do
95
- File.should_receive(:unlink).with(destination_pathname)
96
-
97
106
  subject.uninstall destination_pathname
107
+
108
+ expect(File).to have_received(:unlink).with(destination_pathname)
98
109
  end
99
110
  end
100
111
  end