modify Cache to store user-specified extra dependencies
This commit is contained in:
1 parent
a28cef9eb7
commit
7330e74ab8
9 files changed
+105
-46
No files matched your search
@@ -220,7 +220,7 @@ describe Rscons do
|
||||
it 'allows Ruby classes as custom builders to be used to construct files' do
|
||||
test_dir('custom_builder')
|
||||
class MySource < Rscons::Builder
|
||||
def run(target, sources, cache, env, vars = {})
|
||||
def run(target, sources, user_deps, cache, env, vars = {})
|
||||
File.open(target, 'w') do |fh|
|
||||
fh.puts <<EOF
|
||||
#define THE_VALUE 5678
|
||||
|
||||
+51
-12
@@ -40,12 +40,12 @@ module Rscons
|
||||
describe "#up_to_date?" do
|
||||
it "returns false when target file does not exist" do
|
||||
File.should_receive(:exists?).with("target").and_return(false)
|
||||
build_from({}).up_to_date?("target", "command", []).should be_false
|
||||
build_from({}).up_to_date?("target", "command", [], []).should be_false
|
||||
end
|
||||
|
||||
it "returns false when target is not registered in the cache" do
|
||||
File.should_receive(:exists?).with("target").and_return(true)
|
||||
build_from({}).up_to_date?("target", "command", []).should be_false
|
||||
build_from({}).up_to_date?("target", "command", [], []).should be_false
|
||||
end
|
||||
|
||||
it "returns false when the target's checksum does not match" do
|
||||
@@ -53,7 +53,7 @@ module Rscons
|
||||
cache = build_from(_cache)
|
||||
File.should_receive(:exists?).with("target").and_return(true)
|
||||
cache.should_receive(:calculate_checksum).with("target").and_return("def")
|
||||
cache.up_to_date?("target", "command", []).should be_false
|
||||
cache.up_to_date?("target", "command", [], []).should be_false
|
||||
end
|
||||
|
||||
it "returns false when the build command has changed" do
|
||||
@@ -61,7 +61,7 @@ module Rscons
|
||||
cache = build_from(_cache)
|
||||
File.should_receive(:exists?).with("target").and_return(true)
|
||||
cache.should_receive(:calculate_checksum).with("target").and_return("abc")
|
||||
cache.up_to_date?("target", "command", []).should be_false
|
||||
cache.up_to_date?("target", "command", [], []).should be_false
|
||||
end
|
||||
|
||||
it "returns false when there is a new dependency" do
|
||||
@@ -71,7 +71,7 @@ module Rscons
|
||||
cache = build_from(_cache)
|
||||
File.should_receive(:exists?).with("target").and_return(true)
|
||||
cache.should_receive(:calculate_checksum).with("target").and_return("abc")
|
||||
cache.up_to_date?("target", "command", ["dep.1", "dep.2"]).should be_false
|
||||
cache.up_to_date?("target", "command", ["dep.1", "dep.2"], []).should be_false
|
||||
end
|
||||
|
||||
it "returns false when a dependency's checksum has changed" do
|
||||
@@ -82,13 +82,14 @@ module Rscons
|
||||
{fname: "dep.2",
|
||||
checksum: "dep.2.chk"},
|
||||
{fname: "extra.dep",
|
||||
checksum: "extra.dep.chk"}]}}}
|
||||
checksum: "extra.dep.chk"}],
|
||||
user_deps: []}}}
|
||||
cache = build_from(_cache)
|
||||
File.should_receive(:exists?).with("target").and_return(true)
|
||||
cache.should_receive(:calculate_checksum).with("target").and_return("abc")
|
||||
cache.should_receive(:calculate_checksum).with("dep.1").and_return("dep.1.chk")
|
||||
cache.should_receive(:calculate_checksum).with("dep.2").and_return("dep.2.changed")
|
||||
cache.up_to_date?("target", "command", ["dep.1", "dep.2"]).should be_false
|
||||
cache.up_to_date?("target", "command", ["dep.1", "dep.2"], []).should be_false
|
||||
end
|
||||
|
||||
it "returns false with strict_deps=true when cache has an extra dependency" do
|
||||
@@ -99,11 +100,44 @@ module Rscons
|
||||
{fname: "dep.2",
|
||||
checksum: "dep.2.chk"},
|
||||
{fname: "extra.dep",
|
||||
checksum: "extra.dep.chk"}]}}}
|
||||
checksum: "extra.dep.chk"}],
|
||||
user_deps: []}}}
|
||||
cache = build_from(_cache)
|
||||
File.should_receive(:exists?).with("target").and_return(true)
|
||||
cache.should_receive(:calculate_checksum).with("target").and_return("abc")
|
||||
cache.up_to_date?("target", "command", ["dep.1", "dep.2"], strict_deps: true).should be_false
|
||||
cache.up_to_date?("target", "command", ["dep.1", "dep.2"], [], strict_deps: true).should be_false
|
||||
end
|
||||
|
||||
it "returns false when there is a new user dependency" do
|
||||
_cache = {targets: {"target" => {checksum: "abc",
|
||||
command: "command",
|
||||
deps: [{fname: "dep.1"}],
|
||||
user_deps: []}}}
|
||||
cache = build_from(_cache)
|
||||
File.should_receive(:exists?).with("target").and_return(true)
|
||||
cache.should_receive(:calculate_checksum).with("target").and_return("abc")
|
||||
cache.up_to_date?("target", "command", ["dep.1"], ["file.ld"]).should be_false
|
||||
end
|
||||
|
||||
it "returns false when a user dependency checksum has changed" do
|
||||
_cache = {targets: {"target" => {checksum: "abc",
|
||||
command: "command",
|
||||
deps: [{fname: "dep.1",
|
||||
checksum: "dep.1.chk"},
|
||||
{fname: "dep.2",
|
||||
checksum: "dep.2.chk"},
|
||||
{fname: "extra.dep",
|
||||
checksum: "extra.dep.chk"}],
|
||||
user_deps: [{fname: "user.dep",
|
||||
checksum: "user.dep.chk"}]}}}
|
||||
cache = build_from(_cache)
|
||||
File.should_receive(:exists?).with("target").and_return(true)
|
||||
cache.should_receive(:calculate_checksum).with("target").and_return("abc")
|
||||
cache.should_receive(:calculate_checksum).with("dep.1").and_return("dep.1.chk")
|
||||
cache.should_receive(:calculate_checksum).with("dep.2").and_return("dep.2.chk")
|
||||
cache.should_receive(:calculate_checksum).with("extra.dep").and_return("extra.dep.chk")
|
||||
cache.should_receive(:calculate_checksum).with("user.dep").and_return("INCORRECT")
|
||||
cache.up_to_date?("target", "command", ["dep.1", "dep.2"], ["user.dep"]).should be_false
|
||||
end
|
||||
|
||||
it "returns true when no condition for false is met" do
|
||||
@@ -114,14 +148,15 @@ module Rscons
|
||||
{fname: "dep.2",
|
||||
checksum: "dep.2.chk"},
|
||||
{fname: "extra.dep",
|
||||
checksum: "extra.dep.chk"}]}}}
|
||||
checksum: "extra.dep.chk"}],
|
||||
user_deps: []}}}
|
||||
cache = build_from(_cache)
|
||||
File.should_receive(:exists?).with("target").and_return(true)
|
||||
cache.should_receive(:calculate_checksum).with("target").and_return("abc")
|
||||
cache.should_receive(:calculate_checksum).with("dep.1").and_return("dep.1.chk")
|
||||
cache.should_receive(:calculate_checksum).with("dep.2").and_return("dep.2.chk")
|
||||
cache.should_receive(:calculate_checksum).with("extra.dep").and_return("extra.dep.chk")
|
||||
cache.up_to_date?("target", "command", ["dep.1", "dep.2"]).should be_true
|
||||
cache.up_to_date?("target", "command", ["dep.1", "dep.2"], []).should be_true
|
||||
end
|
||||
end
|
||||
|
||||
@@ -132,7 +167,8 @@ module Rscons
|
||||
cache.should_receive(:calculate_checksum).with("the target").and_return("the checksum")
|
||||
cache.should_receive(:calculate_checksum).with("dep 1").and_return("dep 1 checksum")
|
||||
cache.should_receive(:calculate_checksum).with("dep 2").and_return("dep 2 checksum")
|
||||
cache.register_build("the target", "the command", ["dep 1", "dep 2"])
|
||||
cache.should_receive(:calculate_checksum).with("user.dep").and_return("user.dep checksum")
|
||||
cache.register_build("the target", "the command", ["dep 1", "dep 2"], ["user.dep"])
|
||||
cached_target = cache.instance_variable_get(:@cache)[:targets]["the target"]
|
||||
cached_target.should_not be_nil
|
||||
cached_target[:command].should == "the command"
|
||||
@@ -141,6 +177,9 @@ module Rscons
|
||||
{fname: "dep 1", checksum: "dep 1 checksum"},
|
||||
{fname: "dep 2", checksum: "dep 2 checksum"},
|
||||
]
|
||||
cached_target[:user_deps].should == [
|
||||
{fname: "user.dep", checksum: "user.dep checksum"},
|
||||
]
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -114,7 +114,7 @@ module Rscons
|
||||
|
||||
cache = "cache"
|
||||
Cache.should_receive(:new).and_return(cache)
|
||||
env.should_receive(:run_builder).with(anything, "a.out", ["main.c"], cache, {}).and_return(true)
|
||||
env.should_receive(:run_builder).with(anything, "a.out", ["main.c"], [], cache, {}).and_return(true)
|
||||
cache.should_receive(:write)
|
||||
|
||||
env.process
|
||||
@@ -127,8 +127,8 @@ module Rscons
|
||||
|
||||
cache = "cache"
|
||||
Cache.should_receive(:new).and_return(cache)
|
||||
env.should_receive(:run_builder).with(anything, "main.o", ["other.cc"], cache, {}).and_return("main.o")
|
||||
env.should_receive(:run_builder).with(anything, "a.out", ["main.o"], cache, {}).and_return("a.out")
|
||||
env.should_receive(:run_builder).with(anything, "main.o", ["other.cc"], [], cache, {}).and_return("main.o")
|
||||
env.should_receive(:run_builder).with(anything, "a.out", ["main.o"], [], cache, {}).and_return("a.out")
|
||||
cache.should_receive(:write)
|
||||
|
||||
env.process
|
||||
@@ -141,7 +141,7 @@ module Rscons
|
||||
|
||||
cache = "cache"
|
||||
Cache.should_receive(:new).and_return(cache)
|
||||
env.should_receive(:run_builder).with(anything, "main.o", ["other.cc"], cache, {}).and_return(false)
|
||||
env.should_receive(:run_builder).with(anything, "main.o", ["other.cc"], [], cache, {}).and_return(false)
|
||||
cache.should_receive(:write)
|
||||
|
||||
expect { env.process }.to raise_error BuildError, /Failed.to.build.main.o/
|
||||
@@ -241,8 +241,8 @@ module Rscons
|
||||
cache = "cache"
|
||||
env = Environment.new
|
||||
env.add_builder(ABuilder.new)
|
||||
env.builders["Object"].should_receive(:run).with("mod.o", ["mod.c"], cache, env, anything).and_return("mod.o")
|
||||
env.builders["ABuilder"].should_receive(:run).with("mod2.ab_out", ["mod2.ab_in"], cache, env, anything).and_return("mod2.ab_out")
|
||||
env.builders["Object"].should_receive(:run).with("mod.o", ["mod.c"], [], cache, env, anything).and_return("mod.o")
|
||||
env.builders["ABuilder"].should_receive(:run).with("mod2.ab_out", ["mod2.ab_in"], [], cache, env, anything).and_return("mod2.ab_out")
|
||||
env.build_sources(["precompiled.o", "mod.c", "mod2.ab_in"], [".o", ".ab_out"], cache, {}).should == ["precompiled.o", "mod.o", "mod2.ab_out"]
|
||||
end
|
||||
end
|
||||
@@ -255,14 +255,14 @@ module Rscons
|
||||
build_op[:vars]["CFLAGS"] += ["-O3", "-DSPECIAL"]
|
||||
end
|
||||
end
|
||||
env.builders["Object"].stub(:run) do |target, sources, cache, env, vars|
|
||||
env.builders["Object"].stub(:run) do |target, sources, user_deps, cache, env, vars|
|
||||
vars["CFLAGS"].should == []
|
||||
end
|
||||
env.run_builder(env.builders["Object"], "build/normal/module.o", ["src/normal/module.c"], "cache", {})
|
||||
env.builders["Object"].stub(:run) do |target, sources, cache, env, vars|
|
||||
env.run_builder(env.builders["Object"], "build/normal/module.o", ["src/normal/module.c"], [], "cache", {})
|
||||
env.builders["Object"].stub(:run) do |target, sources, user_deps, cache, env, vars|
|
||||
vars["CFLAGS"].should == ["-O3", "-DSPECIAL"]
|
||||
end
|
||||
env.run_builder(env.builders["Object"], "build/special/module.o", ["src/special/module.c"], "cache", {})
|
||||
env.run_builder(env.builders["Object"], "build/special/module.o", ["src/special/module.c"], [], "cache", {})
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
Reference in new issue
Block a user