diff --git a/build_tests/build_dir/build.rb b/build_tests/build_dir/build.rb index 65b14fd..efc08a9 100644 --- a/build_tests/build_dir/build.rb +++ b/build_tests/build_dir/build.rb @@ -1,5 +1,5 @@ Rscons::Environment.new do |env| env.append('CPPPATH' => Dir['src/**/*/']) - env.build_dir('src', 'build') + env.build_dir(%r{^src/([^/]+)/}, 'build_\\1/') env.Program('build_dir', Dir['src/**/*.c']) end diff --git a/lib/rscons/environment.rb b/lib/rscons/environment.rb index 0c5c1f3..b73ef35 100644 --- a/lib/rscons/environment.rb +++ b/lib/rscons/environment.rb @@ -78,7 +78,6 @@ module Rscons # Source files from src_dir will produce object files under obj_dir. def build_dir(src_dir, obj_dir) src_dir = src_dir.gsub('\\', '/') if src_dir.is_a?(String) - obj_dir = obj_dir.gsub('\\', '/') @build_dirs << [src_dir, obj_dir] end @@ -92,7 +91,7 @@ module Rscons if src_dir.is_a?(Regexp) build_fname.sub!(src_dir, obj_dir) else - build_fname.sub!(/^#{src_dir}\//, "#{obj_dir}/") + build_fname.sub!(%r{^#{src_dir}/}, "#{obj_dir}/") end build_fname.gsub!('\\', '/') end diff --git a/spec/build_tests_spec.rb b/spec/build_tests_spec.rb index 0b6237c..a713756 100644 --- a/spec/build_tests_spec.rb +++ b/spec/build_tests_spec.rb @@ -130,36 +130,34 @@ EOF it 'builds object files in a different build directory' do lines = test_dir('build_dir') `./build_dir`.should == "Hello from two()\n" - File.exists?('build/one/one.o').should be_true - File.exists?('build/two/two.o').should be_true + File.exists?('build_one/one.o').should be_true + File.exists?('build_two/two.o').should be_true end it 'cleans built files' do lines = test_dir('build_dir') `./build_dir`.should == "Hello from two()\n" - File.exists?('build/one/one.o').should be_true - File.exists?('build/two/two.o').should be_true + File.exists?('build_one/one.o').should be_true + File.exists?('build_two/two.o').should be_true Rscons.clean - File.exists?('build/one/one.o').should be_false - File.exists?('build/two/two.o').should be_false - File.exists?('build/one').should be_false - File.exists?('build/two').should be_false - File.exists?('build').should be_false + File.exists?('build_one/one.o').should be_false + File.exists?('build_two/two.o').should be_false + File.exists?('build_one').should be_false + File.exists?('build_two').should be_false File.exists?('src/one/one.c').should be_true end it 'does not clean created directories if other non-rscons-generated files reside there' do lines = test_dir('build_dir') `./build_dir`.should == "Hello from two()\n" - File.exists?('build/one/one.o').should be_true - File.exists?('build/two/two.o').should be_true - File.open('build/two/tmp', 'w') { |fh| fh.puts "dum" } + File.exists?('build_one/one.o').should be_true + File.exists?('build_two/two.o').should be_true + File.open('build_two/tmp', 'w') { |fh| fh.puts "dum" } Rscons.clean - File.exists?('build/one/one.o').should be_false - File.exists?('build/two/two.o').should be_false - File.exists?('build/one').should be_false - File.exists?('build/two').should be_true - File.exists?('build').should be_true + File.exists?('build_one/one.o').should be_false + File.exists?('build_two/two.o').should be_false + File.exists?('build_one').should be_false + File.exists?('build_two').should be_true File.exists?('src/one/one.c').should be_true end