add SHLIBPREFIX

This commit is contained in:
Josh Holtrop 2017-06-07 16:35:20 -04:00
parent 10d4c647b9
commit b7f609b7e8
7 changed files with 32 additions and 11 deletions

View File

@ -1,6 +1,6 @@
Rscons::Environment.new do |env| Rscons::Environment.new do |env|
env["CPPPATH"] << "src/lib" 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", env.Program("test-shared.exe",
Dir["src/*.c"], Dir["src/*.c"],
"LIBPATH" => %w[.], "LIBPATH" => %w[.],

View File

@ -1,6 +1,6 @@
Rscons::Environment.new do |env| Rscons::Environment.new do |env|
env["CPPPATH"] << "src/lib" 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", env.Program("test-shared.exe",
Dir["src/*.cc"], Dir["src/*.cc"],
"LIBPATH" => %w[.], "LIBPATH" => %w[.],

View File

@ -1,6 +1,6 @@
Rscons::Environment.new do |env| Rscons::Environment.new do |env|
env["CPPPATH"] << "src/lib" 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", env.Program("test-shared.exe",
Dir["src/*.c"], Dir["src/*.c"],
"LIBPATH" => %w[.], "LIBPATH" => %w[.],

View File

@ -1,7 +1,7 @@
Rscons::Environment.new do |env| Rscons::Environment.new do |env|
env["CPPPATH"] << "src/lib" env["CPPPATH"] << "src/lib"
env["SHLD"] = "gcc" env["SHLD"] = "gcc"
libmine = env.SharedLibrary("libmine", Dir["src/lib/*.c"]) libmine = env.SharedLibrary("mine", Dir["src/lib/*.c"])
env.Program("test-shared.exe", env.Program("test-shared.exe",
Dir["src/*.c"], Dir["src/*.c"],
"LIBPATH" => %w[.], "LIBPATH" => %w[.],

View File

@ -41,7 +41,7 @@ module Rscons
def create_build_target(options) def create_build_target(options)
env, target, vars = options.values_at(:env, :target, :vars) env, target, vars = options.values_at(:env, :target, :vars)
my_options = options.dup my_options = options.dup
unless target["."] unless File.basename(target)["."]
my_options[:target] += env.expand_varref("${PROGSUFFIX}", vars) my_options[:target] += env.expand_varref("${PROGSUFFIX}", vars)
end end
super(my_options) super(my_options)

View File

@ -11,6 +11,7 @@ module Rscons
# @return [Hash] Default construction variables for the builder. # @return [Hash] Default construction variables for the builder.
def default_variables(env) def default_variables(env)
{ {
'SHLIBPREFIX' => (RUBY_PLATFORM =~ /mingw/ ? '' : 'lib'),
'SHLIBSUFFIX' => (RUBY_PLATFORM =~ /mingw/ ? '.dll' : '.so'), 'SHLIBSUFFIX' => (RUBY_PLATFORM =~ /mingw/ ? '.dll' : '.so'),
'SHLDFLAGS' => ['${LDFLAGS}', '-shared'], 'SHLDFLAGS' => ['${LDFLAGS}', '-shared'],
'SHLD' => nil, 'SHLD' => nil,
@ -38,7 +39,11 @@ module Rscons
def create_build_target(options) def create_build_target(options)
env, target, vars = options.values_at(:env, :target, :vars) env, target, vars = options.values_at(:env, :target, :vars)
my_options = options.dup 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) my_options[:target] += env.expand_varref("${SHLIBSUFFIX}", vars)
end end
super(my_options) super(my_options)

View File

@ -446,7 +446,11 @@ EOF
# point anyway... # point anyway...
#expect(result.stderr).to eq "" #expect(result.stderr).to eq ""
slines = lines(result.stdout) 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
end end
@ -690,13 +694,20 @@ EOF
result = run_test result = run_test
expect(result.stderr).to eq "" expect(result.stderr).to eq ""
slines = lines(result.stdout) 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 result = run_test
expect(result.stderr).to eq "" expect(result.stderr).to eq ""
expect(result.stdout).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/ expect(`./test-static.exe`).to match /Hi from one/
end end
@ -706,13 +717,18 @@ EOF
result = run_test(rsconsfile: "shared_library_cxx.rb") result = run_test(rsconsfile: "shared_library_cxx.rb")
expect(result.stderr).to eq "" expect(result.stderr).to eq ""
slines = lines(result.stdout) 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") result = run_test(rsconsfile: "shared_library_cxx.rb")
expect(result.stderr).to eq "" expect(result.stderr).to eq ""
expect(result.stdout).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/ expect(`./test-static.exe`).to match /Hi from one/
end end