remove build_dir functionality - close #65
This commit is contained in:
1 parent
a1efb1c1b3
commit
432d221be2
22 files changed
+46
-157
No files matched your search
@@ -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"'
|
||||
|
||||
File renamed without changes.
@@ -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
|
||||
File renamed without changes.
@@ -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
|
||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -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.
|
||||
|
||||
+40
-88
@@ -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")
|
||||
|
||||
Reference in new issue
Block a user