remove build_dir functionality - close #65
This commit is contained in:
parent
a1efb1c1b3
commit
432d221be2
@ -1,5 +0,0 @@
|
||||
Rscons::Environment.new do |env|
|
||||
env.append('CPPPATH' => Rscons.glob('src/**'))
|
||||
env.build_dir(%r{^src/([^/]+)/}, 'build_\\1/')
|
||||
env.Program('build_dir.exe', Rscons.glob('src/**/*.c'))
|
||||
end
|
@ -1,5 +0,0 @@
|
||||
env = Rscons::Environment.new do |env|
|
||||
env.append('CPPPATH' => Rscons.glob('src/**/*/'))
|
||||
env.build_dir("src", "build")
|
||||
env.Program('build_dir.exe', Rscons.glob('src/**/*.c'))
|
||||
end
|
@ -1,5 +0,0 @@
|
||||
Rscons::Environment.new do |env|
|
||||
env.append('CPPPATH' => Rscons.glob('src/**'))
|
||||
env.build_dir("src2", "build")
|
||||
env.Program('build_dir.exe', Rscons.glob('src/**/*.c'))
|
||||
end
|
@ -1,6 +0,0 @@
|
||||
Rscons::Environment.new do |env|
|
||||
env.append("CPPPATH" => Rscons.glob("src/**"))
|
||||
env.build_dir("src/one/", "build_one/")
|
||||
env.build_dir("src/two", "build_two")
|
||||
env.Program("build_dir.exe", Rscons.glob("src/**/*.c"))
|
||||
end
|
@ -1,5 +1,4 @@
|
||||
debug = Rscons::Environment.new(echo: :command) do |env|
|
||||
env.build_dir('src', 'debug')
|
||||
env['CFLAGS'] = '-O2'
|
||||
env['CPPFLAGS'] = '-DSTRING="Debug Version"'
|
||||
env.Program('program-debug.exe', Dir['src/*.c'])
|
||||
@ -7,6 +6,5 @@ end
|
||||
|
||||
release = debug.clone do |env|
|
||||
env["CPPFLAGS"] = '-DSTRING="Release Version"'
|
||||
env.build_dir('src', 'release')
|
||||
env.Program('program-release.exe', Dir['src/*.c'])
|
||||
end
|
||||
|
@ -1,5 +1,4 @@
|
||||
env1 = Rscons::Environment.new(echo: :command) do |env|
|
||||
env.build_dir('src', 'build')
|
||||
env['CFLAGS'] = '-O2'
|
||||
env.add_build_hook do |build_op|
|
||||
build_op[:vars]['CPPFLAGS'] = '-DSTRING="Hello"'
|
||||
|
@ -1,10 +1,9 @@
|
||||
Rscons::Environment.new(echo: :command) do |env|
|
||||
env.append('CPPPATH' => Rscons.glob('src/**/*/'))
|
||||
env.build_dir(%r{^src/([^/]+)/}, 'build_\\1/')
|
||||
env.add_build_hook do |build_op|
|
||||
if build_op[:target] =~ %r{build_one/.*\.o}
|
||||
if File.basename(build_op[:target]) == "one.o"
|
||||
build_op[:vars]["CFLAGS"] << "-O1"
|
||||
elsif build_op[:target] =~ %r{build_two/.*\.o}
|
||||
elsif File.basename(build_op[:target]) == "two.o"
|
||||
build_op[:vars]["CFLAGS"] << "-O2"
|
||||
end
|
||||
end
|
@ -3,5 +3,5 @@ Rscons::Environment.new(echo: :command) do |env|
|
||||
FileUtils.mkdir_p(env.build_root)
|
||||
FileUtils.mv("src/one/one.c", env.build_root)
|
||||
env.Object("^/one.o", "^/one.c")
|
||||
env.Program("build_dir.exe", Rscons.glob('src/**/*.c') + ["^/one.o"])
|
||||
env.Program("program.exe", Rscons.glob('src/**/*.c') + ["^/one.o"])
|
||||
end
|
@ -2,5 +2,5 @@ Rscons::Environment.new do |env|
|
||||
env["CSUFFIX"] = %w[.yargh .c]
|
||||
env["CFLAGS"] += %w[-x c]
|
||||
env["CPPPATH"] += Rscons.glob("src/**")
|
||||
env.Program("build_dir.exe", Rscons.glob("src/**/*.{c,yargh}"))
|
||||
env.Program("program.exe", Rscons.glob("src/**/*.{c,yargh}"))
|
||||
end
|
@ -68,7 +68,6 @@ module Rscons
|
||||
@job_set = JobSet.new(@registered_build_dependencies, @side_effects)
|
||||
@user_deps = {}
|
||||
@builders = {}
|
||||
@build_dirs = []
|
||||
@build_hooks = {pre: [], post: []}
|
||||
unless options[:exclude_builders]
|
||||
DEFAULT_BUILDERS.each do |builder_class_name|
|
||||
@ -98,7 +97,6 @@ module Rscons
|
||||
# following:
|
||||
# - :variables to clone construction variables (on by default)
|
||||
# - :builders to clone the builders (on by default)
|
||||
# - :build_dirs to clone the build directories (on by default)
|
||||
# - :build_hooks to clone the build hooks (on by default)
|
||||
#
|
||||
# If a block is given, the Environment object is yielded to the block and
|
||||
@ -109,7 +107,7 @@ module Rscons
|
||||
# @return [Environment] The newly created {Environment} object.
|
||||
def clone(options = {})
|
||||
clone = options[:clone] || :all
|
||||
clone = Set[:variables, :builders, :build_dirs, :build_hooks] if clone == :all
|
||||
clone = Set[:variables, :builders, :build_hooks] if clone == :all
|
||||
clone = Set[] if clone == :none
|
||||
clone = Set.new(clone) if clone.is_a?(Array)
|
||||
clone.delete(:builders) if options[:exclude_builders]
|
||||
@ -122,11 +120,6 @@ module Rscons
|
||||
end
|
||||
end
|
||||
env.append(@varset) if clone.include?(:variables)
|
||||
if clone.include?(:build_dirs)
|
||||
@build_dirs.reverse.each do |src_dir, obj_dir|
|
||||
env.build_dir(src_dir, obj_dir)
|
||||
end
|
||||
end
|
||||
if clone.include?(:build_hooks)
|
||||
@build_hooks[:pre].each do |build_hook_block|
|
||||
env.add_build_hook(&build_hook_block)
|
||||
@ -227,26 +220,6 @@ module Rscons
|
||||
@build_hooks[:post] << block
|
||||
end
|
||||
|
||||
# Specify a build directory for this Environment.
|
||||
#
|
||||
# Source files from src_dir will produce object files under obj_dir.
|
||||
#
|
||||
# @param src_dir [String, Regexp]
|
||||
# Path to the source directory. If a Regexp is given, it will be matched
|
||||
# to source file names.
|
||||
# @param obj_dir [String]
|
||||
# Path to the object directory. If a Regexp is given as src_dir, then
|
||||
# obj_dir can contain backreferences to groups matched from the source
|
||||
# file name.
|
||||
#
|
||||
# @return [void]
|
||||
def build_dir(src_dir, obj_dir)
|
||||
if src_dir.is_a?(String)
|
||||
src_dir = src_dir.gsub("\\", "/").sub(%r{/*$}, "")
|
||||
end
|
||||
@build_dirs.unshift([src_dir, obj_dir])
|
||||
end
|
||||
|
||||
# Return the file name to be built from +source_fname+ with suffix
|
||||
# +suffix+.
|
||||
#
|
||||
@ -264,20 +237,9 @@ module Rscons
|
||||
# @return [String]
|
||||
# The file name to be built from +source_fname+ with suffix +suffix+.
|
||||
def get_build_fname(source_fname, suffix, options = {})
|
||||
build_fname = Rscons.set_suffix(source_fname, suffix).gsub('\\', '/')
|
||||
options[:features] ||= []
|
||||
extra_path = options[:features].include?("shared") ? "/_shared" : ""
|
||||
found_match = @build_dirs.find do |src_dir, obj_dir|
|
||||
if src_dir.is_a?(Regexp)
|
||||
build_fname.sub!(src_dir, "#{obj_dir}#{extra_path}")
|
||||
else
|
||||
build_fname.sub!(%r{^#{src_dir}/}, "#{obj_dir}#{extra_path}/")
|
||||
end
|
||||
end
|
||||
unless found_match
|
||||
build_fname = "#{@build_root}#{extra_path}/#{Util.make_relative_path(build_fname)}"
|
||||
end
|
||||
build_fname.gsub('\\', '/')
|
||||
"#{@build_root}#{extra_path}/#{Util.make_relative_path(Rscons.set_suffix(source_fname, suffix))}".gsub("\\", "/")
|
||||
end
|
||||
|
||||
# Get a construction variable's value.
|
||||
|
@ -257,54 +257,14 @@ EOF
|
||||
]
|
||||
end
|
||||
|
||||
it 'builds object files in a different build directory' do
|
||||
test_dir('build_dir')
|
||||
result = run_rscons
|
||||
expect(result.stderr).to eq ""
|
||||
expect(`./build_dir.exe`).to eq "Hello from two()\n"
|
||||
expect(File.exists?('build_one/one.o')).to be_truthy
|
||||
expect(File.exists?('build_two/two.o')).to be_truthy
|
||||
end
|
||||
|
||||
it "supports trailing slashes at the end of build_dir sources and destinations" do
|
||||
test_dir("build_dir")
|
||||
result = run_rscons(rsconscript: "slashes.rb")
|
||||
expect(result.stderr).to eq ""
|
||||
expect(`./build_dir.exe`).to eq "Hello from two()\n"
|
||||
expect(File.exists?("build_one/one.o")).to be_truthy
|
||||
expect(File.exists?("build_two/two.o")).to be_truthy
|
||||
end
|
||||
|
||||
it 'uses build directories before build root' do
|
||||
test_dir('build_dir')
|
||||
result = run_rscons(rsconscript: "build_dirs_and_root.rb")
|
||||
expect(result.stderr).to eq ""
|
||||
expect(lines(result.stdout)).to include *[
|
||||
"CC build/one/one.o",
|
||||
"CC build/two/two.o",
|
||||
"LD build_dir.exe",
|
||||
]
|
||||
end
|
||||
|
||||
it 'uses build_root if no build directories match' do
|
||||
test_dir('build_dir')
|
||||
result = run_rscons(rsconscript: "no_match_build_dir.rb")
|
||||
expect(result.stderr).to eq ""
|
||||
expect(lines(result.stdout)).to include *[
|
||||
"CC build/e.1/src/one/one.o",
|
||||
"CC build/e.1/src/two/two.o",
|
||||
"LD build_dir.exe",
|
||||
]
|
||||
end
|
||||
|
||||
it "expands target and source paths starting with ^/ to be relative to the build root" do
|
||||
test_dir('build_dir')
|
||||
test_dir("typical")
|
||||
result = run_rscons(rsconscript: "carat.rb")
|
||||
expect(result.stderr).to eq ""
|
||||
expect(lines(result.stdout)).to include *[
|
||||
%q{gcc -c -o build/e.1/one.o -MMD -MF build/e.1/one.mf -Isrc -Isrc/one -Isrc/two build/e.1/one.c},
|
||||
%q{gcc -c -o build/e.1/src/two/two.o -MMD -MF build/e.1/src/two/two.mf -Isrc -Isrc/one -Isrc/two src/two/two.c},
|
||||
%Q{gcc -o build_dir.exe build/e.1/src/two/two.o build/e.1/one.o},
|
||||
%Q{gcc -o program.exe build/e.1/src/two/two.o build/e.1/one.o},
|
||||
]
|
||||
end
|
||||
|
||||
@ -317,36 +277,28 @@ EOF
|
||||
end
|
||||
|
||||
it 'cleans built files' do
|
||||
test_dir('build_dir')
|
||||
test_dir("simple")
|
||||
result = run_rscons
|
||||
expect(result.stderr).to eq ""
|
||||
expect(`./build_dir.exe`).to eq "Hello from two()\n"
|
||||
expect(File.exists?('build_one/one.o')).to be_truthy
|
||||
expect(File.exists?('build_two/two.o')).to be_truthy
|
||||
expect(`./simple.exe`).to match /This is a simple C program/
|
||||
expect(File.exists?('build/e.1/simple.o')).to be_truthy
|
||||
result = run_rscons(op: %w[clean])
|
||||
expect(File.exists?('build_one/one.o')).to be_falsey
|
||||
expect(File.exists?('build_two/two.o')).to be_falsey
|
||||
expect(File.exists?('build_one')).to be_falsey
|
||||
expect(File.exists?('build_two')).to be_falsey
|
||||
expect(File.exists?('build_dir.exe')).to be_falsey
|
||||
expect(File.exists?('src/one/one.c')).to be_truthy
|
||||
expect(File.exists?('build/e.1/simple.o')).to be_falsey
|
||||
expect(File.exists?('build/e.1')).to be_falsey
|
||||
expect(File.exists?('simple.exe')).to be_falsey
|
||||
expect(File.exists?('simple.c')).to be_truthy
|
||||
end
|
||||
|
||||
it 'does not clean created directories if other non-rscons-generated files reside there' do
|
||||
test_dir('build_dir')
|
||||
test_dir("simple")
|
||||
result = run_rscons
|
||||
expect(result.stderr).to eq ""
|
||||
expect(`./build_dir.exe`).to eq "Hello from two()\n"
|
||||
expect(File.exists?('build_one/one.o')).to be_truthy
|
||||
expect(File.exists?('build_two/two.o')).to be_truthy
|
||||
File.open('build_two/tmp', 'w') { |fh| fh.puts "dum" }
|
||||
expect(`./simple.exe`).to match /This is a simple C program/
|
||||
expect(File.exists?('build/e.1/simple.o')).to be_truthy
|
||||
File.open('build/e.1/dum', 'w') { |fh| fh.puts "dum" }
|
||||
result = run_rscons(op: %w[clean])
|
||||
expect(File.exists?('build_one/one.o')).to be_falsey
|
||||
expect(File.exists?('build_two/two.o')).to be_falsey
|
||||
expect(File.exists?('build_one')).to be_falsey
|
||||
expect(File.exists?('build_two')).to be_truthy
|
||||
expect(File.exists?('build_dir.exe')).to be_falsey
|
||||
expect(File.exists?('src/one/one.c')).to be_truthy
|
||||
expect(File.exists?('build/e.1')).to be_truthy
|
||||
expect(File.exists?('build/e.1/dum')).to be_truthy
|
||||
end
|
||||
|
||||
it 'allows Ruby classes as custom builders to be used to construct files' do
|
||||
@ -380,10 +332,10 @@ EOF
|
||||
result = run_rscons
|
||||
expect(result.stderr).to eq ""
|
||||
expect(lines(result.stdout)).to include *[
|
||||
%q{gcc -c -o debug/program.o -MMD -MF debug/program.mf '-DSTRING="Debug Version"' -O2 src/program.c},
|
||||
%Q{gcc -o program-debug.exe debug/program.o},
|
||||
%q{gcc -c -o release/program.o -MMD -MF release/program.mf '-DSTRING="Release Version"' -O2 src/program.c},
|
||||
%Q{gcc -o program-release.exe release/program.o},
|
||||
%q{gcc -c -o build/e.1/src/program.o -MMD -MF build/e.1/src/program.mf '-DSTRING="Debug Version"' -O2 src/program.c},
|
||||
%Q{gcc -o program-debug.exe build/e.1/src/program.o},
|
||||
%q{gcc -c -o build/e.2/src/program.o -MMD -MF build/e.2/src/program.mf '-DSTRING="Release Version"' -O2 src/program.c},
|
||||
%Q{gcc -o program-release.exe build/e.2/src/program.o},
|
||||
]
|
||||
end
|
||||
|
||||
@ -392,12 +344,12 @@ EOF
|
||||
result = run_rscons(rsconscript: "clone_all.rb")
|
||||
expect(result.stderr).to eq ""
|
||||
expect(lines(result.stdout)).to include *[
|
||||
%q{gcc -c -o build/program.o -MMD -MF build/program.mf -DSTRING="Hello" -O2 src/program.c},
|
||||
%q{post build/program.o},
|
||||
%Q{gcc -o program.exe build/program.o},
|
||||
%q{gcc -c -o build/e.1/src/program.o -MMD -MF build/e.1/src/program.mf -DSTRING="Hello" -O2 src/program.c},
|
||||
%q{post build/e.1/src/program.o},
|
||||
%Q{gcc -o program.exe build/e.1/src/program.o},
|
||||
%q{post program.exe},
|
||||
%q{post build/program.o},
|
||||
%Q{gcc -o program2.exe build/program.o},
|
||||
%q{post build/e.2/src/program.o},
|
||||
%Q{gcc -o program2.exe build/e.2/src/program.o},
|
||||
%q{post program2.exe},
|
||||
]
|
||||
end
|
||||
@ -439,13 +391,13 @@ EOF
|
||||
end
|
||||
|
||||
it 'supports build hooks to override construction variables' do
|
||||
test_dir("build_dir")
|
||||
test_dir("typical")
|
||||
result = run_rscons(rsconscript: "build_hooks.rb")
|
||||
expect(result.stderr).to eq ""
|
||||
expect(lines(result.stdout)).to include *[
|
||||
'gcc -c -o build_one/one.o -MMD -MF build_one/one.mf -Isrc/one -Isrc/two -O1 src/one/one.c',
|
||||
'gcc -c -o build_two/two.o -MMD -MF build_two/two.mf -Isrc/one -Isrc/two -O2 src/two/two.c',
|
||||
'gcc -o build_hook.exe build_one/one.o build_two/two.o',
|
||||
'gcc -c -o build/e.1/src/one/one.o -MMD -MF build/e.1/src/one/one.mf -Isrc/one -Isrc/two -O1 src/one/one.c',
|
||||
'gcc -c -o build/e.1/src/two/two.o -MMD -MF build/e.1/src/two/two.mf -Isrc/one -Isrc/two -O2 src/two/two.c',
|
||||
'gcc -o build_hook.exe build/e.1/src/one/one.o build/e.1/src/two/two.o',
|
||||
]
|
||||
expect(`./build_hook.exe`).to eq "Hello from two()\n"
|
||||
end
|
||||
@ -596,13 +548,13 @@ EOF
|
||||
end
|
||||
|
||||
it "supports multiple values for CSUFFIX" do
|
||||
test_dir("build_dir")
|
||||
test_dir("typical")
|
||||
FileUtils.mv("src/one/one.c", "src/one/one.yargh")
|
||||
result = run_rscons(rsconscript: "csuffix.rb")
|
||||
expect(result.stderr).to eq ""
|
||||
expect(File.exists?("build/e.1/src/one/one.o")).to be_truthy
|
||||
expect(File.exists?("build/e.1/src/two/two.o")).to be_truthy
|
||||
expect(`./build_dir.exe`).to eq "Hello from two()\n"
|
||||
expect(`./program.exe`).to eq "Hello from two()\n"
|
||||
end
|
||||
|
||||
it "supports multiple values for OBJSUFFIX" do
|
||||
@ -678,7 +630,7 @@ EOF
|
||||
end
|
||||
|
||||
it "supports registering multiple build targets with the same target path" do
|
||||
test_dir("build_dir")
|
||||
test_dir("typical")
|
||||
result = run_rscons(rsconscript: "multiple_targets_same_name.rb")
|
||||
expect(result.stderr).to eq ""
|
||||
expect(File.exists?("one.o")).to be_truthy
|
||||
@ -689,7 +641,7 @@ EOF
|
||||
end
|
||||
|
||||
it "expands target and source paths when builders are registered in build hooks" do
|
||||
test_dir("build_dir")
|
||||
test_dir("typical")
|
||||
result = run_rscons(rsconscript: "post_build_hook_expansion.rb")
|
||||
expect(result.stderr).to eq ""
|
||||
expect(File.exists?("one.o")).to be_truthy
|
||||
@ -841,7 +793,7 @@ EOF
|
||||
end
|
||||
|
||||
it "prints a builder's short description with 'command' echo mode if there is no command" do
|
||||
test_dir("build_dir")
|
||||
test_dir("typical")
|
||||
|
||||
result = run_rscons(rsconscript: "echo_command_ruby_builder.rb")
|
||||
expect(result.stderr).to eq ""
|
||||
@ -849,7 +801,7 @@ EOF
|
||||
end
|
||||
|
||||
it "supports a string for a builder's echoed 'command' with Environment#print_builder_run_message" do
|
||||
test_dir("build_dir")
|
||||
test_dir("typical")
|
||||
|
||||
result = run_rscons(rsconscript: "echo_command_string.rb")
|
||||
expect(result.stderr).to eq ""
|
||||
@ -940,7 +892,7 @@ EOF
|
||||
end
|
||||
|
||||
it 'supports build hooks to override construction variables' do
|
||||
test_dir("build_dir")
|
||||
test_dir("typical")
|
||||
result = run_rscons(rsconscript: "backward_compatible_build_hooks.rb")
|
||||
expect(result.stderr).to eq ""
|
||||
expect(lines(result.stdout)).to include *[
|
||||
@ -1031,7 +983,7 @@ EOF
|
||||
|
||||
context "Install buildler" do
|
||||
it "copies a file to the target file name" do
|
||||
test_dir("build_dir")
|
||||
test_dir("typical")
|
||||
|
||||
result = run_rscons(rsconscript: "install.rb")
|
||||
expect(result.stderr).to eq ""
|
||||
@ -1051,7 +1003,7 @@ EOF
|
||||
end
|
||||
|
||||
it "operates the same as a Copy builder" do
|
||||
test_dir("build_dir")
|
||||
test_dir("typical")
|
||||
|
||||
result = run_rscons(rsconscript: "copy.rb")
|
||||
expect(result.stderr).to eq ""
|
||||
@ -1071,7 +1023,7 @@ EOF
|
||||
end
|
||||
|
||||
it "copies a file to the target directory name" do
|
||||
test_dir "build_dir"
|
||||
test_dir("typical")
|
||||
|
||||
result = run_rscons(rsconscript: "install_directory.rb")
|
||||
expect(result.stderr).to eq ""
|
||||
@ -1085,7 +1037,7 @@ EOF
|
||||
end
|
||||
|
||||
it "copies a directory to the non-existent target directory name" do
|
||||
test_dir "build_dir"
|
||||
test_dir("typical")
|
||||
result = run_rscons(rsconscript: "install_directory.rb")
|
||||
expect(result.stderr).to eq ""
|
||||
expect(lines(result.stdout)).to include("Install noexist/src")
|
||||
@ -1096,7 +1048,7 @@ EOF
|
||||
end
|
||||
|
||||
it "copies a directory to the existent target directory name" do
|
||||
test_dir "build_dir"
|
||||
test_dir("typical")
|
||||
result = run_rscons(rsconscript: "install_directory.rb")
|
||||
expect(result.stderr).to eq ""
|
||||
expect(lines(result.stdout)).to include("Install exist/src")
|
||||
|
Loading…
x
Reference in New Issue
Block a user