diff --git a/build_tests/simple/progsuffix2.rb b/build_tests/simple/progsuffix2.rb new file mode 100644 index 0000000..8f7ce00 --- /dev/null +++ b/build_tests/simple/progsuffix2.rb @@ -0,0 +1,4 @@ +Rscons::Environment.new do |env| + env["MYSUFFIX"] = ".out" + env.Program("simple${MYSUFFIX}", Dir["*.c"]) +end diff --git a/build_tests/simple/progsuffix3.rb b/build_tests/simple/progsuffix3.rb new file mode 100644 index 0000000..9552a3f --- /dev/null +++ b/build_tests/simple/progsuffix3.rb @@ -0,0 +1,3 @@ +Rscons::Environment.new do |env| + env.Program("simple", Dir["*.c"], "PROGSUFFIX" => ".xyz") +end diff --git a/lib/rscons/builder.rb b/lib/rscons/builder.rb index fb8a8ad..3a3e62b 100644 --- a/lib/rscons/builder.rb +++ b/lib/rscons/builder.rb @@ -36,6 +36,8 @@ module Rscons # The user-supplied target name. # @option options [Array] :sources # The user-supplied source file name(s). + # @option options [Hash,VarSet] :vars + # Extra construction variables. # # @return [BuildTarget] def create_build_target(options) diff --git a/lib/rscons/builders/program.rb b/lib/rscons/builders/program.rb index d558858..45f9f8f 100644 --- a/lib/rscons/builders/program.rb +++ b/lib/rscons/builders/program.rb @@ -39,9 +39,10 @@ module Rscons # # @return [BuildTarget] def create_build_target(options) + env, target, vars = options.values_at(:env, :target, :vars) my_options = options.dup - unless my_options[:target] =~ /\./ - my_options[:target] += options[:env].expand_varref("${PROGSUFFIX}") + unless env.expand_varref(target, vars) =~ /\./ + my_options[:target] += env.expand_varref("${PROGSUFFIX}", vars) end super(my_options) end diff --git a/lib/rscons/environment.rb b/lib/rscons/environment.rb index 805ed86..f120e02 100644 --- a/lib/rscons/environment.rb +++ b/lib/rscons/environment.rb @@ -409,7 +409,7 @@ module Rscons end sources = Array(sources) builder = @builders[method.to_s] - build_target = builder.create_build_target(env: self, target: target, sources: sources) + build_target = builder.create_build_target(env: self, target: target, sources: sources, vars: vars) add_target(build_target.to_s, builder, sources, vars || {}, rest) build_target else diff --git a/spec/build_tests_spec.rb b/spec/build_tests_spec.rb index 4ff375a..3b61882 100644 --- a/spec/build_tests_spec.rb +++ b/spec/build_tests_spec.rb @@ -632,7 +632,7 @@ EOF ] end - it "allows overriding progsuffix" do + it "allows overriding PROGSUFFIX" do test_dir("simple") result = run_test(rsconsfile: "progsuffix.rb") expect(result.stderr).to eq "" @@ -642,6 +642,26 @@ EOF ] end + it "does not use PROGSUFFIX when the Program target name expands to a value already containing an extension" do + test_dir("simple") + result = run_test(rsconsfile: "progsuffix2.rb") + expect(result.stderr).to eq "" + expect(lines(result.stdout)).to eq [ + "CC simple.o", + "LD simple.out", + ] + end + + it "allows overriding PROGSUFFIX from extra vars passed in to the builder" do + test_dir("simple") + result = run_test(rsconsfile: "progsuffix3.rb") + expect(result.stderr).to eq "" + expect(lines(result.stdout)).to eq [ + "CC simple.o", + "LD simple.xyz", + ] + end + context "backward compatibility" do it "allows a builder to call Environment#run_builder in a non-threaded manner" do test_dir("simple")