Add more integration tests for SharedLibrary and backwards compatibility
This commit is contained in:
parent
aa192d7567
commit
db2ec82a25
6
build_tests/shared_library/error_unknown_suffix.rb
Normal file
6
build_tests/shared_library/error_unknown_suffix.rb
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
Rscons::Environment.new do |env|
|
||||||
|
File.open("foo.xyz", "wb") do |fh|
|
||||||
|
fh.puts("hi")
|
||||||
|
end
|
||||||
|
env.SharedObject("foo.o", "foo.xyz")
|
||||||
|
end
|
11
build_tests/shared_library/shared_library_cxx.rb
Normal file
11
build_tests/shared_library/shared_library_cxx.rb
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
Rscons::Environment.new do |env|
|
||||||
|
env["CPPPATH"] << "src/lib"
|
||||||
|
libmine = env.SharedLibrary("libmine", Dir["src/lib/*.cc"])
|
||||||
|
env.Program("test-shared.exe",
|
||||||
|
Dir["src/*.cc"],
|
||||||
|
"LIBPATH" => %w[.],
|
||||||
|
"LIBS" => %w[mine])
|
||||||
|
env.build_after("test-shared.exe", libmine.to_s)
|
||||||
|
env.Program("test-static.exe",
|
||||||
|
Dir["src/**/*.cc"])
|
||||||
|
end
|
12
build_tests/shared_library/shared_library_set_shld.rb
Normal file
12
build_tests/shared_library/shared_library_set_shld.rb
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
Rscons::Environment.new do |env|
|
||||||
|
env["CPPPATH"] << "src/lib"
|
||||||
|
env["SHLD"] = "gcc"
|
||||||
|
libmine = env.SharedLibrary("libmine", Dir["src/lib/*.c"])
|
||||||
|
env.Program("test-shared.exe",
|
||||||
|
Dir["src/*.c"],
|
||||||
|
"LIBPATH" => %w[.],
|
||||||
|
"LIBS" => %w[mine])
|
||||||
|
env.build_after("test-shared.exe", libmine.to_s)
|
||||||
|
env.Program("test-static.exe",
|
||||||
|
Dir["src/**/*.c"])
|
||||||
|
end
|
6
build_tests/shared_library/src/lib/one.cc
Normal file
6
build_tests/shared_library/src/lib/one.cc
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
void one(void)
|
||||||
|
{
|
||||||
|
printf("Hi from one()\n");
|
||||||
|
}
|
6
build_tests/shared_library/src/lib/two.cc
Normal file
6
build_tests/shared_library/src/lib/two.cc
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
void two(void)
|
||||||
|
{
|
||||||
|
printf("Hi from two()\n");
|
||||||
|
}
|
8
build_tests/shared_library/src/main.cc
Normal file
8
build_tests/shared_library/src/main.cc
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
#include "one.h"
|
||||||
|
#include "two.h"
|
||||||
|
|
||||||
|
int main(int argc, char * argv[])
|
||||||
|
{
|
||||||
|
one();
|
||||||
|
two();
|
||||||
|
}
|
28
build_tests/simple/bc_produces.rb
Normal file
28
build_tests/simple/bc_produces.rb
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
class MyObject < Rscons::Builder
|
||||||
|
def produces?(target, source, env)
|
||||||
|
target.end_with?(".o") and source.end_with?(".xyz")
|
||||||
|
end
|
||||||
|
|
||||||
|
def run(target, sources, cache, env, vars)
|
||||||
|
cflags = env.expand_varref("${CFLAGS}", vars)
|
||||||
|
vars = vars.merge(
|
||||||
|
"CFLAGS" => cflags + %w[-x c],
|
||||||
|
"CSUFFIX" => ".xyz")
|
||||||
|
env.run_builder(env.builders["Object"], target, sources, cache, vars)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
Rscons::Environment.new do |env|
|
||||||
|
env.add_builder(MyObject.new)
|
||||||
|
File.open("test.xyz", "w") do |fh|
|
||||||
|
fh.puts <<EOF
|
||||||
|
#include <stdio.h>
|
||||||
|
int main(int argc, char * argv[])
|
||||||
|
{
|
||||||
|
printf("XYZ!\\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
env.Program("test", "test.xyz")
|
||||||
|
end
|
||||||
|
end
|
@ -687,6 +687,22 @@ EOF
|
|||||||
expect(`./test-static.exe`).to match /Hi from one/
|
expect(`./test-static.exe`).to match /Hi from one/
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "creates shared libraries using C++" do
|
||||||
|
test_dir("shared_library")
|
||||||
|
|
||||||
|
result = run_test(rsconsfile: "shared_library_cxx.rb")
|
||||||
|
expect(result.stderr).to eq ""
|
||||||
|
slines = lines(result.stdout)
|
||||||
|
expect(slines).to include("SHLD libmine.so")
|
||||||
|
|
||||||
|
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/
|
||||||
|
expect(`./test-static.exe`).to match /Hi from one/
|
||||||
|
end
|
||||||
|
|
||||||
context "backward compatibility" do
|
context "backward compatibility" do
|
||||||
it "allows a builder to call Environment#run_builder in a non-threaded manner" do
|
it "allows a builder to call Environment#run_builder in a non-threaded manner" do
|
||||||
test_dir("simple")
|
test_dir("simple")
|
||||||
@ -725,6 +741,12 @@ EOF
|
|||||||
expect(result.stderr).to eq ""
|
expect(result.stderr).to eq ""
|
||||||
expect(lines(result.stdout)).to eq ["MyCommand simple.o"]
|
expect(lines(result.stdout)).to eq ["MyCommand simple.o"]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "supports the old 3-parameter signature to Builder#produces?" do
|
||||||
|
test_dir("simple")
|
||||||
|
result = run_test(rsconsfile: "bc_produces.rb")
|
||||||
|
expect(result.stderr).to eq ""
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context "CFile builder" do
|
context "CFile builder" do
|
||||||
@ -1115,6 +1137,14 @@ EOF
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context "SharedObject builder" do
|
||||||
|
it "raises an error when given a source file with an unknown suffix" do
|
||||||
|
test_dir("shared_library")
|
||||||
|
result = run_test(rsconsfile: "error_unknown_suffix.rb")
|
||||||
|
expect(result.stderr).to match /unknown input file type: "foo.xyz"/
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
context "Library builder" do
|
context "Library builder" do
|
||||||
it "allows overriding ARCMD construction variable" do
|
it "allows overriding ARCMD construction variable" do
|
||||||
test_dir("library")
|
test_dir("library")
|
||||||
@ -1124,6 +1154,17 @@ EOF
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context "SharedLibrary builder" do
|
||||||
|
it "allows explicitly specifying SHLD construction variable value" do
|
||||||
|
test_dir("shared_library")
|
||||||
|
|
||||||
|
result = run_test(rsconsfile: "shared_library_set_shld.rb")
|
||||||
|
expect(result.stderr).to eq ""
|
||||||
|
slines = lines(result.stdout)
|
||||||
|
expect(slines).to include("SHLD libmine.so")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
context "multi-threading" do
|
context "multi-threading" do
|
||||||
it "waits for subcommands in threads for builders that support threaded commands" do
|
it "waits for subcommands in threads for builders that support threaded commands" do
|
||||||
test_dir("simple")
|
test_dir("simple")
|
||||||
|
Loading…
x
Reference in New Issue
Block a user