diff --git a/build_tests/library/Rsconscript b/build_tests/library/Rsconscript index 910f0d7..1311f14 100644 --- a/build_tests/library/Rsconscript +++ b/build_tests/library/Rsconscript @@ -1,4 +1,7 @@ env(echo: :command) do |env| - env.Program('library.exe', ['lib.a', 'three.c']) - env.Library("lib.a", ['one.c', 'two.c'], 'CPPFLAGS' => ['-Dmake_lib']) + env["LIBS"] << "mylib" + env["LIBPATH"] << "." + env.Program("library.exe", "one.c") + env.depends("library.exe", "libmylib.a") + env.Library("libmylib.a", ["two.c", "three.c"], "CPPFLAGS" => ["-Dmake_lib"]) end diff --git a/build_tests/library/one.c b/build_tests/library/one.c index 7b74439..a45d800 100644 --- a/build_tests/library/one.c +++ b/build_tests/library/one.c @@ -1,8 +1,11 @@ #include -#ifdef make_lib +void two(); +void three(); + int main(int argc, char *argv[]) { + two(); printf("Library\n"); + three(); } -#endif diff --git a/build_tests/library/override_arcmd.rb b/build_tests/library/override_arcmd.rb index 22f092e..b245e13 100644 --- a/build_tests/library/override_arcmd.rb +++ b/build_tests/library/override_arcmd.rb @@ -1,4 +1,4 @@ env(echo: :command) do |env| - env["ARCMD"] = %w[ar rcf ${_TARGET} ${_SOURCES}] + env["ARCMD"] = %w[ar rcsu ${_TARGET} ${_SOURCES}] env.Library("lib.a", glob("*.c")) end diff --git a/build_tests/library/three.c b/build_tests/library/three.c index e69de29..0be5f47 100644 --- a/build_tests/library/three.c +++ b/build_tests/library/three.c @@ -0,0 +1,3 @@ +void three(void) +{ +} diff --git a/build_tests/library/two.c b/build_tests/library/two.c index e69de29..e91fc51 100644 --- a/build_tests/library/two.c +++ b/build_tests/library/two.c @@ -0,0 +1,3 @@ +void two(void) +{ +} diff --git a/build_tests/simple/link_flag_change.rb b/build_tests/simple/link_flag_change.rb index 381cbdd..8ab25cc 100644 --- a/build_tests/simple/link_flag_change.rb +++ b/build_tests/simple/link_flag_change.rb @@ -1,5 +1,6 @@ env(echo: :command) do |env| env["LD"] = "gcc" + mkdir_p("libdir") env["LIBPATH"] += ["libdir"] env.Program('simple.exe', Dir['*.c']) end diff --git a/build_tests/two_sources/two.c b/build_tests/two_sources/two.c index d4d6c8c..e0efea0 100644 --- a/build_tests/two_sources/two.c +++ b/build_tests/two_sources/two.c @@ -1,3 +1,6 @@ #ifdef ONE #error ONE should not be defined #endif +void two(void) +{ +} diff --git a/spec/build_tests_spec.rb b/spec/build_tests_spec.rb index ef6c0cd..967446c 100644 --- a/spec/build_tests_spec.rb +++ b/spec/build_tests_spec.rb @@ -565,14 +565,16 @@ EOF result = run_rscons expect(result.stderr).to eq "" verify_lines(lines(result.stdout), [ - %r{gcc -c -o build/e.1/one.c.o -MMD -MF build/e.1/one.c.o.mf -Dmake_lib one.c}, %r{gcc -c -o build/e.1/two.c.o -MMD -MF build/e.1/two.c.o.mf -Dmake_lib two.c}, - %r{ar rcs lib.a build/e.1/one.c.o build/e.1/two.c.o}, - %r{gcc -c -o build/e.1/three.c.o -MMD -MF build/e.1/three.c.o.mf three.c}, - %r{gcc -o library.exe lib.a build/e.1/three.c.o}, + %r{gcc -c -o build/e.1/three.c.o -MMD -MF build/e.1/three.c.o.mf -Dmake_lib three.c}, + %r{ar rcs libmylib.a build/e.1/two.c.o build/e.1/three.c.o}, + %r{gcc -c -o build/e.1/one.c.o -MMD -MF build/e.1/one.c.o.mf one.c}, + %r{gcc -o library.exe build/e.1/one.c.o -L. -lmylib}, ]) expect(File.exists?("library.exe")).to be_truthy - expect(nr(`ar t lib.a`)).to eq "one.c.o\ntwo.c.o\n" + ar_t = nr(`ar t libmylib.a`) + expect(ar_t).to match %r{\btwo.c.o\b} + expect(ar_t).to match %r{\bthree.c.o\b} end it 'supports build hooks to override construction variables' do @@ -1664,7 +1666,7 @@ EOF test_dir("library") result = run_rscons(args: %w[-f override_arcmd.rb]) expect(result.stderr).to eq "" - verify_lines(lines(result.stdout), [%r{ar rcf lib.a build/e.1/one.c.o build/e.1/three.c.o build/e.1/two.c.o}]) + verify_lines(lines(result.stdout), [%r{ar rcsu lib.a build/e.1/one.c.o build/e.1/three.c.o build/e.1/two.c.o}]) end it "allows passing object files as sources" do @@ -1709,7 +1711,7 @@ EOF ]) expect(File.exist?("simple.exe")).to be_truthy expect(File.exist?("simple.size")).to be_truthy - expect(File.read("simple.size")).to match /text.*data.*bss/ + expect(File.read("simple.size")).to match /text.*data/i end end