Compare commits

..
6 Commits
Author SHA1 Message Date
josh f33be07a15 v1.9.3 2016-09-30 14:03:35 -04:00
josh c4c2d5c128 Environment#parse_flags should put -std=XXX flags in CCFLAGS, not CFLAGS 2016-09-30 14:02:30 -04:00
josh 3065dc48ec document passing multiple dependencies to env.depends() 2016-05-02 09:10:14 -04:00
josh 9ca2934695 document explicit dependencies 2016-03-02 13:33:00 -05:00
josh 3af6b6be1b v1.9.2 2016-01-12 10:16:00 -05:00
josh 0442b876a5 allow phony targets in conjunction with a build root 2016-01-12 10:14:10 -05:00
6 changed files with 38 additions and 11 deletions

No files matched your search

+2 -2
View File
@@ -1,7 +1,7 @@
PATH PATH
remote: . remote: .
specs: specs:
rscons (1.9.1) rscons (1.9.3)
json (~> 1.0) json (~> 1.0)
GEM GEM
@@ -48,4 +48,4 @@ DEPENDENCIES
yard yard
BUNDLED WITH BUNDLED WITH
1.10.4 1.10.6
+23
View File
@@ -394,6 +394,25 @@ not expected to be produced by the builder.
Phony targets will still be "rebuilt" if any source or the command is out of Phony targets will still be "rebuilt" if any source or the command is out of
date. date.
### Explicit Dependencies
A target can be marked as depending on another file that Rscons would not
otherwise know about via the `Environment#depends` function. For example,
to force the linker to re-link a Program output when a linker script changes:
```ruby
Rscons::Environment.new do |env|
env.Program("a.out", "foo.c", "LDFLAGS" => %w[-T linker_script.ld])
env.depends("a.out", "linker_script.ld")
end
```
You can pass multiple dependency files to `Environment#depends`:
```ruby
env.depends("my_app", "config/link.ld", "README.txt", *Dir.glob("assets/**/*"))
```
### Construction Variable Naming ### Construction Variable Naming
* uppercase strings - the default construction variables that Rscons uses * uppercase strings - the default construction variables that Rscons uses
@@ -406,6 +425,10 @@ http://rubydoc.info/github/holtrop/rscons/frames.
## Release Notes ## Release Notes
### v1.9.2
- allow phony targets in conjunction with build roots
### v1.9.1 ### v1.9.1
- change *SUFFIX defaults to arrays - change *SUFFIX defaults to arrays
+4 -2
View File
@@ -509,8 +509,12 @@ module Rscons
# #
# @return [String] The expanded path. # @return [String] The expanded path.
def expand_path(path) def expand_path(path)
if Rscons.phony_target?(path)
path
else
path.sub(%r{^\^(?=[\\/])}, @build_root) path.sub(%r{^\^(?=[\\/])}, @build_root)
end end
end
# Execute a command using the system shell. # Execute a command using the system shell.
# #
@@ -614,8 +618,6 @@ module Rscons
elsif word == "-pthread" elsif word == "-pthread"
append["CCFLAGS", [word]] append["CCFLAGS", [word]]
append["LDFLAGS", [word]] append["LDFLAGS", [word]]
elsif word =~ /^-std=/
append["CFLAGS", [word]]
elsif word =~ /^-Wa,(.*)$/ elsif word =~ /^-Wa,(.*)$/
append["ASFLAGS", $1.split(",")] append["ASFLAGS", $1.split(",")]
elsif word =~ /^-Wl,(.*)$/ elsif word =~ /^-Wl,(.*)$/
+1 -1
View File
@@ -1,4 +1,4 @@
module Rscons module Rscons
# gem version # gem version
VERSION = "1.9.1" VERSION = "1.9.3"
end end
+4 -1
View File
@@ -933,9 +933,11 @@ EOF
end end
context "phony targets" do context "phony targets" do
[false, true].each do |with_build_root|
it "allows specifying a Symbol as a target name and reruns the builder if the sources or command have changed" do it "allows specifying a Symbol as a target name and reruns the builder if the sources or command have changed" do
test_dir("simple") test_dir("simple")
env = Rscons::Environment.new do |env| env = Rscons::Environment.new do |env|
env.build_root = "bld" if with_build_root
env.add_builder(:Checker) do |target, sources, cache, env, vars| env.add_builder(:Checker) do |target, sources, cache, env, vars|
unless cache.up_to_date?(target, :Checker, sources, env) unless cache.up_to_date?(target, :Checker, sources, env)
puts "Checker #{sources.first}" if env.echo != :off puts "Checker #{sources.first}" if env.echo != :off
@@ -946,7 +948,7 @@ EOF
env.Program("simple.exe", "simple.c") env.Program("simple.exe", "simple.c")
env.Checker(:checker, "simple.exe") env.Checker(:checker, "simple.exe")
end end
expect(lines).to eq(["CC simple.o", "LD simple.exe", "Checker simple.exe"]) expect(lines).to eq(["CC #{with_build_root ? 'bld/' : ''}simple.o", "LD simple.exe", "Checker simple.exe"])
env.clone do |env| env.clone do |env|
env.Checker(:checker, "simple.exe") env.Checker(:checker, "simple.exe")
@@ -962,5 +964,6 @@ EOF
expect(lines).to eq(["Checker simple.exe"]) expect(lines).to eq(["Checker simple.exe"])
end end
end end
end
end end
+4 -5
View File
@@ -396,24 +396,23 @@ module Rscons
describe "#parse_flags" do describe "#parse_flags" do
it "executes the shell command and parses the returned flags when the input argument begins with !" do it "executes the shell command and parses the returned flags when the input argument begins with !" do
env = Environment.new env = Environment.new
env["CFLAGS"] = ["-g"] env["CCFLAGS"] = ["-g"]
expect(env).to receive(:shell).with("my_command").and_return(%[-arch my_arch -Done=two -include ii -isysroot sr -Iincdir -Llibdir -lmy_lib -mno-cygwin -mwindows -pthread -std=c99 -Wa,'asm,args 1 2' -Wl,linker,"args 1 2" -Wp,cpp,args,1,2 -arbitrary +other_arbitrary some_lib /a/b/c/lib]) expect(env).to receive(:shell).with("my_command").and_return(%[-arch my_arch -Done=two -include ii -isysroot sr -Iincdir -Llibdir -lmy_lib -mno-cygwin -mwindows -pthread -std=c99 -Wa,'asm,args 1 2' -Wl,linker,"args 1 2" -Wp,cpp,args,1,2 -arbitrary +other_arbitrary some_lib /a/b/c/lib])
rv = env.parse_flags("!my_command") rv = env.parse_flags("!my_command")
expect(rv).to eq({ expect(rv).to eq({
"CCFLAGS" => %w[-arch my_arch -include ii -isysroot sr -mno-cygwin -pthread -arbitrary +other_arbitrary], "CCFLAGS" => %w[-arch my_arch -include ii -isysroot sr -mno-cygwin -pthread -std=c99 -arbitrary +other_arbitrary],
"LDFLAGS" => %w[-arch my_arch -isysroot sr -mno-cygwin -mwindows -pthread] + ["linker", "args 1 2"] + %w[+other_arbitrary], "LDFLAGS" => %w[-arch my_arch -isysroot sr -mno-cygwin -mwindows -pthread] + ["linker", "args 1 2"] + %w[+other_arbitrary],
"CPPPATH" => %w[incdir], "CPPPATH" => %w[incdir],
"LIBS" => %w[my_lib some_lib /a/b/c/lib], "LIBS" => %w[my_lib some_lib /a/b/c/lib],
"LIBPATH" => %w[libdir], "LIBPATH" => %w[libdir],
"CPPDEFINES" => %w[one=two], "CPPDEFINES" => %w[one=two],
"CFLAGS" => %w[-std=c99],
"ASFLAGS" => ["asm", "args 1 2"], "ASFLAGS" => ["asm", "args 1 2"],
"CPPFLAGS" => %w[cpp args 1 2], "CPPFLAGS" => %w[cpp args 1 2],
}) })
expect(env["CFLAGS"]).to eq(["-g"]) expect(env["CCFLAGS"]).to eq(["-g"])
expect(env["ASFLAGS"]).to eq([]) expect(env["ASFLAGS"]).to eq([])
env.merge_flags(rv) env.merge_flags(rv)
expect(env["CFLAGS"]).to eq(["-g", "-std=c99"]) expect(env["CCFLAGS"]).to eq(%w[-g -arch my_arch -include ii -isysroot sr -mno-cygwin -pthread -std=c99 -arbitrary +other_arbitrary])
expect(env["ASFLAGS"]).to eq(["asm", "args 1 2"]) expect(env["ASFLAGS"]).to eq(["asm", "args 1 2"])
end end
end end