From b7f609b7e85f5562eb5c6cc76da226e94d1b2f14 Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Wed, 7 Jun 2017 16:35:20 -0400 Subject: [PATCH] add SHLIBPREFIX --- build_tests/shared_library/Rsconsfile | 2 +- .../shared_library/shared_library_cxx.rb | 2 +- .../shared_library/shared_library_d.rb | 2 +- .../shared_library/shared_library_set_shld.rb | 2 +- lib/rscons/builders/program.rb | 2 +- lib/rscons/builders/shared_library.rb | 7 ++++- spec/build_tests_spec.rb | 26 +++++++++++++++---- 7 files changed, 32 insertions(+), 11 deletions(-) diff --git a/build_tests/shared_library/Rsconsfile b/build_tests/shared_library/Rsconsfile index 8ff5182..bc6bacd 100644 --- a/build_tests/shared_library/Rsconsfile +++ b/build_tests/shared_library/Rsconsfile @@ -1,6 +1,6 @@ Rscons::Environment.new do |env| env["CPPPATH"] << "src/lib" - libmine = env.SharedLibrary("libmine", Dir["src/lib/*.c"]) + libmine = env.SharedLibrary("mine", Dir["src/lib/*.c"]) env.Program("test-shared.exe", Dir["src/*.c"], "LIBPATH" => %w[.], diff --git a/build_tests/shared_library/shared_library_cxx.rb b/build_tests/shared_library/shared_library_cxx.rb index 3cd8746..c83a25f 100644 --- a/build_tests/shared_library/shared_library_cxx.rb +++ b/build_tests/shared_library/shared_library_cxx.rb @@ -1,6 +1,6 @@ Rscons::Environment.new do |env| env["CPPPATH"] << "src/lib" - libmine = env.SharedLibrary("libmine", Dir["src/lib/*.cc"]) + libmine = env.SharedLibrary("mine", Dir["src/lib/*.cc"]) env.Program("test-shared.exe", Dir["src/*.cc"], "LIBPATH" => %w[.], diff --git a/build_tests/shared_library/shared_library_d.rb b/build_tests/shared_library/shared_library_d.rb index 6279b7d..e64279c 100644 --- a/build_tests/shared_library/shared_library_d.rb +++ b/build_tests/shared_library/shared_library_d.rb @@ -1,6 +1,6 @@ Rscons::Environment.new do |env| env["CPPPATH"] << "src/lib" - libmine = env.SharedLibrary("libmine", Dir["src/lib/*.d"]) + libmine = env.SharedLibrary("mine", Dir["src/lib/*.d"]) env.Program("test-shared.exe", Dir["src/*.c"], "LIBPATH" => %w[.], diff --git a/build_tests/shared_library/shared_library_set_shld.rb b/build_tests/shared_library/shared_library_set_shld.rb index 9be6cee..01ac9a8 100644 --- a/build_tests/shared_library/shared_library_set_shld.rb +++ b/build_tests/shared_library/shared_library_set_shld.rb @@ -1,7 +1,7 @@ Rscons::Environment.new do |env| env["CPPPATH"] << "src/lib" env["SHLD"] = "gcc" - libmine = env.SharedLibrary("libmine", Dir["src/lib/*.c"]) + libmine = env.SharedLibrary("mine", Dir["src/lib/*.c"]) env.Program("test-shared.exe", Dir["src/*.c"], "LIBPATH" => %w[.], diff --git a/lib/rscons/builders/program.rb b/lib/rscons/builders/program.rb index 4ea813c..cefdf92 100644 --- a/lib/rscons/builders/program.rb +++ b/lib/rscons/builders/program.rb @@ -41,7 +41,7 @@ module Rscons def create_build_target(options) env, target, vars = options.values_at(:env, :target, :vars) my_options = options.dup - unless target["."] + unless File.basename(target)["."] my_options[:target] += env.expand_varref("${PROGSUFFIX}", vars) end super(my_options) diff --git a/lib/rscons/builders/shared_library.rb b/lib/rscons/builders/shared_library.rb index 0af06b1..86b9715 100644 --- a/lib/rscons/builders/shared_library.rb +++ b/lib/rscons/builders/shared_library.rb @@ -11,6 +11,7 @@ module Rscons # @return [Hash] Default construction variables for the builder. def default_variables(env) { + 'SHLIBPREFIX' => (RUBY_PLATFORM =~ /mingw/ ? '' : 'lib'), 'SHLIBSUFFIX' => (RUBY_PLATFORM =~ /mingw/ ? '.dll' : '.so'), 'SHLDFLAGS' => ['${LDFLAGS}', '-shared'], 'SHLD' => nil, @@ -38,7 +39,11 @@ module Rscons def create_build_target(options) env, target, vars = options.values_at(:env, :target, :vars) my_options = options.dup - unless env.expand_varref(target, vars) =~ /\./ + libprefix = env.expand_varref("${SHLIBPREFIX}", vars) + unless File.basename(target).start_with?(libprefix) + my_options[:target].sub!(%r{^(.*/)?([^/]+)$}, "\\1#{libprefix}\\2") + end + unless File.basename(target)["."] my_options[:target] += env.expand_varref("${SHLIBSUFFIX}", vars) end super(my_options) diff --git a/spec/build_tests_spec.rb b/spec/build_tests_spec.rb index 9a3954b..8e1ce69 100644 --- a/spec/build_tests_spec.rb +++ b/spec/build_tests_spec.rb @@ -446,7 +446,11 @@ EOF # point anyway... #expect(result.stderr).to eq "" slines = lines(result.stdout) - expect(slines).to include("SHLD libmine.so") + if RUBY_PLATFORM =~ /mingw/ + expect(slines).to include("SHLD mine.dll") + else + expect(slines).to include("SHLD libmine.so") + end end end @@ -690,13 +694,20 @@ EOF result = run_test expect(result.stderr).to eq "" slines = lines(result.stdout) - expect(slines).to include("SHLD libmine.so") + if RUBY_PLATFORM =~ /mingw/ + expect(slines).to include("SHLD mine.dll") + expect(File.exists?("mine.dll")).to be_truthy + else + expect(slines).to include("SHLD libmine.so") + expect(File.exists?("libmine.so")).to be_truthy + end result = run_test expect(result.stderr).to eq "" expect(result.stdout).to eq "" - expect(`LD_LIBRARY_PATH=. ./test-shared.exe`).to match /Hi from one/ + ld_library_path_prefix = (RUBY_PLATFORM =~ /mingw/ ? "" : "LD_LIBRARY_PATH=. ") + expect(`#{ld_library_path_prefix}./test-shared.exe`).to match /Hi from one/ expect(`./test-static.exe`).to match /Hi from one/ end @@ -706,13 +717,18 @@ EOF result = run_test(rsconsfile: "shared_library_cxx.rb") expect(result.stderr).to eq "" slines = lines(result.stdout) - expect(slines).to include("SHLD libmine.so") + if RUBY_PLATFORM =~ /mingw/ + expect(slines).to include("SHLD mine.dll") + else + expect(slines).to include("SHLD libmine.so") + end result = run_test(rsconsfile: "shared_library_cxx.rb") expect(result.stderr).to eq "" expect(result.stdout).to eq "" - expect(`LD_LIBRARY_PATH=. ./test-shared.exe`).to match /Hi from one/ + ld_library_path_prefix = (RUBY_PLATFORM =~ /mingw/ ? "" : "LD_LIBRARY_PATH=. ") + expect(`#{ld_library_path_prefix}./test-shared.exe`).to match /Hi from one/ expect(`./test-static.exe`).to match /Hi from one/ end