rscons 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/README.md CHANGED
@@ -127,9 +127,9 @@ An Rscons::Environment consists of:
127
127
  * a collection of targets to build
128
128
  * a collection of build hooks
129
129
 
130
- When cloning an environment, the construction variables, builders, and build
131
- directories are cloned, but the new environment does not inherit any of the
132
- targets or build hooks from the source environment.
130
+ When cloning an environment, the construction variables and builders are
131
+ cloned, but the new environment does not inherit any of the targets, build
132
+ hooks, build directories, or the build root from the source environment.
133
133
 
134
134
  Cloned environments contain "deep copies" of construction variables.
135
135
  For example, in:
@@ -9,6 +9,9 @@ module Rscons
9
9
  # Hash of +{"builder_name" => builder_object}+ pairs.
10
10
  attr_reader :builders
11
11
 
12
+ # String or +nil+
13
+ attr_accessor :build_root
14
+
12
15
  # Create an Environment object.
13
16
  # @param variables [Hash]
14
17
  # The variables hash can contain construction variables, which are
@@ -42,10 +45,10 @@ module Rscons
42
45
 
43
46
  # Make a copy of the Environment object.
44
47
  # The cloned environment will contain a copy of all environment options,
45
- # construction variables, builders, and build directories. It will not
46
- # contain a copy of the targets or build hooks.
47
- # If a block is given, the Environment object is yielded to the block and
48
- # when the block returns, the {#process} method is automatically called.
48
+ # construction variables, and builders. It will not contain a copy of the
49
+ # targets, build hooks, build directories, or the build root. If a block
50
+ # is given, the Environment object is yielded to the block and when the
51
+ # block returns, the {#process} method is automatically called.
49
52
  def clone(variables = {})
50
53
  env = Environment.new()
51
54
  @builders.each do |builder_name, builder|
@@ -88,14 +91,19 @@ module Rscons
88
91
  # This method takes into account the Environment's build directories.
89
92
  def get_build_fname(source_fname, suffix)
90
93
  build_fname = source_fname.set_suffix(suffix).gsub('\\', '/')
91
- @build_dirs.each do |src_dir, obj_dir|
94
+ found_match = @build_dirs.find do |src_dir, obj_dir|
92
95
  if src_dir.is_a?(Regexp)
93
96
  build_fname.sub!(src_dir, obj_dir)
94
97
  else
95
98
  build_fname.sub!(%r{^#{src_dir}/}, "#{obj_dir}/")
96
99
  end
97
- build_fname.gsub!('\\', '/')
98
100
  end
101
+ if @build_root and not found_match
102
+ unless source_fname.start_with?('/') or source_fname =~ %r{^\w:[\\/]}
103
+ build_fname = "#{@build_root}/#{build_fname}"
104
+ end
105
+ end
106
+ build_fname.gsub!('\\', '/')
99
107
  build_fname
100
108
  end
101
109
 
@@ -1,4 +1,4 @@
1
1
  module Rscons
2
2
  # gem version
3
- VERSION = "0.1.0"
3
+ VERSION = "0.2.0"
4
4
  end
@@ -158,6 +158,28 @@ describe Rscons do
158
158
  File.exists?('build_two/two.o').should be_true
159
159
  end
160
160
 
161
+ it 'uses build directories before build root' do
162
+ test_dir('build_dir')
163
+ Rscons::Environment.new do |env|
164
+ env.append('CPPPATH' => Dir['src/**/*/'])
165
+ env.build_dir("src", "build")
166
+ env.build_root = "build_root"
167
+ env.Program('build_dir', Dir['src/**/*.c'])
168
+ end
169
+ lines.should == ["CC build/one/one.o", "CC build/two/two.o", "LD build_dir"]
170
+ end
171
+
172
+ it 'uses build_root if no build directories match' do
173
+ test_dir('build_dir')
174
+ Rscons::Environment.new do |env|
175
+ env.append('CPPPATH' => Dir['src/**/*/'])
176
+ env.build_dir("src2", "build")
177
+ env.build_root = "build_root"
178
+ env.Program('build_dir', Dir['src/**/*.c'])
179
+ end
180
+ lines.should == ["CC build_root/src/one/one.o", "CC build_root/src/two/two.o", "LD build_dir"]
181
+ end
182
+
161
183
  it 'cleans built files' do
162
184
  test_dir('build_dir')
163
185
  Rscons::Environment.new do |env|
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rscons
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-11-06 00:00:00.000000000 Z
12
+ date: 2013-11-08 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec-core
@@ -217,7 +217,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
217
217
  version: '0'
218
218
  segments:
219
219
  - 0
220
- hash: 306135951
220
+ hash: -353770733
221
221
  required_rubygems_version: !ruby/object:Gem::Requirement
222
222
  none: false
223
223
  requirements:
@@ -226,7 +226,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
226
226
  version: '0'
227
227
  segments:
228
228
  - 0
229
- hash: 306135951
229
+ hash: -353770733
230
230
  requirements: []
231
231
  rubyforge_project:
232
232
  rubygems_version: 1.8.23