Cannot output binary to an environment's build root with the same name as the top-level source directory - close #168

This commit is contained in:
Josh Holtrop 2023-09-10 08:51:03 -04:00
parent a7b962c11a
commit 3867133e89
3 changed files with 96 additions and 82 deletions

View File

@ -0,0 +1,4 @@
env "src" do |env|
env["CPPPATH"] += glob("src/**")
env.Program("^/src", glob("src/**/*.c"))
end

View File

@ -277,7 +277,7 @@ module Rscons
if extra_path = builder_class.extra_path
extra_path = "/#{extra_path}"
end
"#{@build_root}#{extra_path}/#{Util.make_relative_path("#{source_fname}#{suffix}")}".gsub("\\", "/")
"#{@build_root}/o#{extra_path}/#{Util.make_relative_path("#{source_fname}#{suffix}")}".gsub("\\", "/")
end
# Build all build targets specified in the Environment.

View File

@ -195,7 +195,7 @@ EOF
test_dir('simple')
result = run_rscons
expect(result.stderr).to eq ""
expect(File.exist?('build/e.1/simple.c.o')).to be_truthy
expect(File.exist?('build/e.1/o/simple.c.o')).to be_truthy
expect(nr(`./simple.exe`)).to eq "This is a simple C program\n"
end
@ -203,7 +203,7 @@ EOF
test_dir("simple")
result = run_rscons(args: %w[-f env_in_task.rb])
expect(result.stderr).to eq ""
expect(File.exist?("build/e.1/simple.c.o")).to be_truthy
expect(File.exist?("build/e.1/o/simple.c.o")).to be_truthy
expect(nr(`./simple.exe`)).to eq "This is a simple C program\n"
end
@ -212,7 +212,7 @@ EOF
result = run_rscons(args: %w[-b b])
expect(result.stderr).to eq ""
expect(Dir.exist?("build")).to be_falsey
expect(File.exist?("b/e.1/simple.c.o")).to be_truthy
expect(File.exist?("b/e.1/o/simple.c.o")).to be_truthy
end
it "uses the build directory specified by an environment variable" do
@ -221,7 +221,7 @@ EOF
result = run_rscons
expect(result.stderr).to eq ""
expect(Dir.exist?("build")).to be_falsey
expect(File.exist?("b2/e.1/simple.c.o")).to be_truthy
expect(File.exist?("b2/e.1/o/simple.c.o")).to be_truthy
end
it "allows specifying a Builder object as the source to another build target" do
@ -237,8 +237,8 @@ EOF
result = run_rscons(args: %w[-f command.rb])
expect(result.stderr).to eq ""
verify_lines(lines(result.stdout), [
%r{gcc -c -o build/e.1/simple.c.o -MMD -MF build/e.1/simple.c.o.mf simple.c},
%r{gcc -o simple.exe build/e.1/simple.c.o},
%r{gcc -c -o build/e.1/o/simple.c.o -MMD -MF build/e.1/o/simple.c.o.mf simple.c},
%r{gcc -o simple.exe build/e.1/o/simple.c.o},
])
end
@ -256,7 +256,7 @@ EOF
test_dir('header')
result = run_rscons
expect(result.stderr).to eq ""
expect(File.exist?('build/e.1/header.c.o')).to be_truthy
expect(File.exist?('build/e.1/o/header.c.o')).to be_truthy
expect(nr(`./header.exe`)).to eq "The value is 2\n"
end
@ -306,13 +306,13 @@ EOF
result = run_rscons(args: %w[-f command.rb])
expect(result.stderr).to eq ""
verify_lines(lines(result.stdout), [
%r{gcc -c -o build/e.1/simple.c.o -MMD -MF build/e.1/simple.c.o.mf simple.c},
%r{gcc -o simple.exe build/e.1/simple.c.o},
%r{gcc -c -o build/e.1/o/simple.c.o -MMD -MF build/e.1/o/simple.c.o.mf simple.c},
%r{gcc -o simple.exe build/e.1/o/simple.c.o},
])
result = run_rscons(args: %w[-f link_flag_change.rb])
expect(result.stderr).to eq ""
verify_lines(lines(result.stdout), [
%r{gcc -o simple.exe build/e.1/simple.c.o -Llibdir},
%r{gcc -o simple.exe build/e.1/o/simple.c.o -Llibdir},
])
end
@ -343,8 +343,8 @@ EOF
expect(result.stderr).to eq ""
verify_lines(lines(result.stdout), [
%r{gcc -c -o bld/e.1/one.o -MMD -MF bld/e.1/one.o.mf -Isrc -Isrc/one -Isrc/two bld/e.1/one.c},
%r{gcc -c -o bld/e.1/bld/two.c.o -MMD -MF bld/e.1/bld/two.c.o.mf -Isrc -Isrc/one -Isrc/two bld/two.c},
%r{gcc -o bld/program.exe bld/e.1/one.o bld/e.1/bld/two.c.o},
%r{gcc -c -o bld/e.1/o/bld/two.c.o -MMD -MF bld/e.1/o/bld/two.c.o.mf -Isrc -Isrc/one -Isrc/two bld/two.c},
%r{gcc -o bld/program.exe bld/e.1/one.o bld/e.1/o/bld/two.c.o},
])
end
@ -368,9 +368,9 @@ EOF
result = run_rscons
expect(result.stderr).to eq ""
expect(`./simple.exe`).to match /This is a simple C program/
expect(File.exist?('build/e.1/simple.c.o')).to be_truthy
expect(File.exist?('build/e.1/o/simple.c.o')).to be_truthy
result = run_rscons(args: %w[clean])
expect(File.exist?('build/e.1/simple.c.o')).to be_falsey
expect(File.exist?('build/e.1/o/simple.c.o')).to be_falsey
expect(File.exist?('build/e.1')).to be_falsey
expect(File.exist?('simple.exe')).to be_falsey
expect(File.exist?('simple.c')).to be_truthy
@ -380,18 +380,18 @@ EOF
test_dir("simple")
result = run_rscons(args: %w[-f clean.rb])
expect(result.stderr).to eq ""
expect(File.exist?("build/e.1/simple.c.o")).to be_truthy
expect(File.exist?("build/e.1/o/simple.c.o")).to be_truthy
result = run_rscons(args: %w[-f clean.rb clean])
expect(result.stderr).to eq ""
expect(result.stdout).to match %r{custom clean action}
expect(File.exist?("build/e.1/simple.c.o")).to be_falsey
expect(File.exist?("build/e.1/o/simple.c.o")).to be_falsey
end
it "does not process environments" do
test_dir("simple")
result = run_rscons(args: %w[clean])
expect(result.stderr).to eq ""
expect(File.exist?('build/e.1/simple.c.o')).to be_falsey
expect(File.exist?('build/e.1/o/simple.c.o')).to be_falsey
expect(File.exist?('build/e.1')).to be_falsey
expect(File.exist?('simple.exe')).to be_falsey
expect(File.exist?('simple.c')).to be_truthy
@ -403,11 +403,11 @@ EOF
result = run_rscons
expect(result.stderr).to eq ""
expect(`./simple.exe`).to match /This is a simple C program/
expect(File.exist?('build/e.1/simple.c.o')).to be_truthy
File.open('build/e.1/dum', 'w') { |fh| fh.puts "dum" }
expect(File.exist?('build/e.1/o/simple.c.o')).to be_truthy
File.open('build/e.1/o/dum', 'w') { |fh| fh.puts "dum" }
result = run_rscons(args: %w[clean])
expect(File.exist?('build/e.1')).to be_truthy
expect(File.exist?('build/e.1/dum')).to be_truthy
expect(File.exist?('build/e.1/o/dum')).to be_truthy
end
it "removes built files but not installed files" do
@ -420,12 +420,12 @@ EOF
result = run_rscons(args: %w[-f install.rb install])
expect(result.stderr).to eq ""
expect(File.exist?("#{prefix}/bin/program.exe")).to be_truthy
expect(File.exist?("build/e.1/src/one/one.c.o")).to be_truthy
expect(File.exist?("build/e.1/o/src/one/one.c.o")).to be_truthy
result = run_rscons(args: %w[-f install.rb clean])
expect(result.stderr).to eq ""
expect(File.exist?("#{prefix}/bin/program.exe")).to be_truthy
expect(File.exist?("build/e.1/src/one/one.c.o")).to be_falsey
expect(File.exist?("build/e.1/o/src/one/one.c.o")).to be_falsey
end
end
@ -442,7 +442,7 @@ EOF
result = run_rscons(args: %w[-f install.rb clean])
expect(result.stderr).to eq ""
expect(File.exist?("#{prefix}/bin/program.exe")).to be_truthy
expect(File.exist?("build/e.1/src/one/one.c.o")).to be_falsey
expect(File.exist?("build/e.1/o/src/one/one.c.o")).to be_falsey
result = run_rscons(args: %w[-f install.rb -v uninstall])
expect(result.stderr).to eq ""
@ -524,10 +524,10 @@ EOF
result = run_rscons
expect(result.stderr).to eq ""
verify_lines(lines(result.stdout), [
%r{gcc -c -o build/e.1/src/program.c.o -MMD -MF build/e.1/src/program.c.o.mf '-DSTRING="Debug Version"' -O2 src/program.c},
%r{gcc -o program-debug.exe build/e.1/src/program.c.o},
%r{gcc -c -o build/e.2/src/program.c.o -MMD -MF build/e.2/src/program.c.o.mf '-DSTRING="Release Version"' -O2 src/program.c},
%r{gcc -o program-release.exe build/e.2/src/program.c.o},
%r{gcc -c -o build/e.1/o/src/program.c.o -MMD -MF build/e.1/o/src/program.c.o.mf '-DSTRING="Debug Version"' -O2 src/program.c},
%r{gcc -o program-debug.exe build/e.1/o/src/program.c.o},
%r{gcc -c -o build/e.2/o/src/program.c.o -MMD -MF build/e.2/o/src/program.c.o.mf '-DSTRING="Release Version"' -O2 src/program.c},
%r{gcc -o program-release.exe build/e.2/o/src/program.c.o},
])
end
@ -536,12 +536,12 @@ EOF
result = run_rscons(args: %w[-f clone_all.rb])
expect(result.stderr).to eq ""
verify_lines(lines(result.stdout), [
%r{gcc -c -o build/e.1/src/program.c.o -MMD -MF build/e.1/src/program.c.o.mf -DSTRING="Hello" -O2 src/program.c},
%r{post build/e.1/src/program.c.o},
%r{gcc -o program.exe build/e.1/src/program.c.o},
%r{gcc -c -o build/e.1/o/src/program.c.o -MMD -MF build/e.1/o/src/program.c.o.mf -DSTRING="Hello" -O2 src/program.c},
%r{post build/e.1/o/src/program.c.o},
%r{gcc -o program.exe build/e.1/o/src/program.c.o},
%r{post program.exe},
%r{post build/e.2/src/program.c.o},
%r{gcc -o program2.exe build/e.2/src/program.c.o},
%r{post build/e.2/o/src/program.c.o},
%r{gcc -o program2.exe build/e.2/o/src/program.c.o},
%r{post program2.exe},
])
end
@ -550,7 +550,7 @@ EOF
test_dir('simple_cc')
result = run_rscons
expect(result.stderr).to eq ""
expect(File.exist?('build/e.1/simple.cc.o')).to be_truthy
expect(File.exist?('build/e.1/o/simple.cc.o')).to be_truthy
expect(nr(`./simple.exe`)).to eq "This is a simple C++ program\n"
end
@ -567,9 +567,9 @@ EOF
result = run_rscons
expect(result.stderr).to eq ""
verify_lines(lines(result.stdout), [
%r{gcc -c -o one.o -MMD -MF build/e.1/one.o.mf -DONE one.c},
%r{gcc -c -o build/e.1/two.c.o -MMD -MF build/e.1/two.c.o.mf two.c},
%r{gcc -o two_sources.exe one.o build/e.1/two.c.o},
%r{gcc -c -o one.o -MMD -MF build/e.1/o/one.o.mf -DONE one.c},
%r{gcc -c -o build/e.1/o/two.c.o -MMD -MF build/e.1/o/two.c.o.mf two.c},
%r{gcc -o two_sources.exe one.o build/e.1/o/two.c.o},
])
expect(File.exist?("two_sources.exe")).to be_truthy
expect(nr(`./two_sources.exe`)).to eq "This is a C program with two sources.\n"
@ -580,11 +580,11 @@ EOF
result = run_rscons
expect(result.stderr).to eq ""
verify_lines(lines(result.stdout), [
%r{gcc -c -o build/e.1/two.c.o -MMD -MF build/e.1/two.c.o.mf -Dmake_lib two.c},
%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},
%r{gcc -c -o build/e.1/o/two.c.o -MMD -MF build/e.1/o/two.c.o.mf -Dmake_lib two.c},
%r{gcc -c -o build/e.1/o/three.c.o -MMD -MF build/e.1/o/three.c.o.mf -Dmake_lib three.c},
%r{ar rcs libmylib.a build/e.1/o/two.c.o build/e.1/o/three.c.o},
%r{gcc -c -o build/e.1/o/one.c.o -MMD -MF build/e.1/o/one.c.o.mf one.c},
%r{gcc -o library.exe build/e.1/o/one.c.o -L. -lmylib},
])
expect(File.exist?("library.exe")).to be_truthy
ar_t = nr(`ar t libmylib.a`)
@ -597,9 +597,9 @@ EOF
result = run_rscons(args: %w[-f build_hooks.rb])
expect(result.stderr).to eq ""
verify_lines(lines(result.stdout), [
%r{gcc -c -o build/e.1/src/one/one.c.o -MMD -MF build/e.1/src/one/one.c.o.mf -Isrc/one -Isrc/two -O1 src/one/one.c},
%r{gcc -c -o build/e.1/src/two/two.c.o -MMD -MF build/e.1/src/two/two.c.o.mf -Isrc/one -Isrc/two -O2 src/two/two.c},
%r{gcc -o build_hook.exe build/e.1/src/one/one.c.o build/e.1/src/two/two.c.o},
%r{gcc -c -o build/e.1/o/src/one/one.c.o -MMD -MF build/e.1/o/src/one/one.c.o.mf -Isrc/one -Isrc/two -O1 src/one/one.c},
%r{gcc -c -o build/e.1/o/src/two/two.c.o -MMD -MF build/e.1/o/src/two/two.c.o.mf -Isrc/one -Isrc/two -O2 src/two/two.c},
%r{gcc -o build_hook.exe build/e.1/o/src/one/one.c.o build/e.1/o/src/two/two.c.o},
])
expect(nr(`./build_hook.exe`)).to eq "Hello from two()\n"
end
@ -609,8 +609,8 @@ EOF
result = run_rscons(args: %w[-f build_hooks_override_vars.rb])
expect(result.stderr).to eq ""
verify_lines(lines(result.stdout), [
%r{gcc -c -o one.o -MMD -MF build/e.1/one.o.mf -Isrc -Isrc/one -Isrc/two -O1 src/two/two.c},
%r{gcc -c -o two.o -MMD -MF build/e.1/two.o.mf -Isrc -Isrc/one -Isrc/two -O2 src/two/two.c},
%r{gcc -c -o one.o -MMD -MF build/e.1/o/one.o.mf -Isrc -Isrc/one -Isrc/two -O1 src/two/two.c},
%r{gcc -c -o two.o -MMD -MF build/e.1/o/two.o.mf -Isrc -Isrc/one -Isrc/two -O2 src/two/two.c},
])
expect(File.exist?('one.o')).to be_truthy
expect(File.exist?('two.o')).to be_truthy
@ -626,7 +626,7 @@ EOF
%r{Compiling simple.c},
%r{Linking simple.exe},
])
expect(File.exist?('build/e.1/simple.c.o')).to be_truthy
expect(File.exist?('build/e.1/o/simple.c.o')).to be_truthy
expect(nr(`./simple.exe`)).to eq "This is a simple C program\n"
File.open("program.ld", "w") {|fh| fh.puts("2")}
@ -671,9 +671,9 @@ EOF
result = run_rscons
expect(result.stderr).to eq ""
slines = lines(result.stdout)
verify_lines(slines, [%r{gdc -c -o build/e.1/main.d.o -MMD -MF build/e.1/main.d.o.mf main.d}])
verify_lines(slines, [%r{gdc -c -o build/e.1/mod.d.o -MMD -MF build/e.1/mod.d.o.mf mod.d}])
verify_lines(slines, [%r{gdc -o hello-d.exe build/e.1/main.d.o build/e.1/mod.d.o}])
verify_lines(slines, [%r{gdc -c -o build/e.1/o/main.d.o -MMD -MF build/e.1/o/main.d.o.mf main.d}])
verify_lines(slines, [%r{gdc -c -o build/e.1/o/mod.d.o -MMD -MF build/e.1/o/mod.d.o.mf mod.d}])
verify_lines(slines, [%r{gdc -o hello-d.exe build/e.1/o/main.d.o build/e.1/o/mod.d.o}])
expect(`./hello-d.exe`.rstrip).to eq "Hello from D, value is 42!"
end
end
@ -683,9 +683,9 @@ EOF
result = run_rscons(args: %w[-f build-ldc2.rb])
expect(result.stderr).to eq ""
slines = lines(result.stdout)
verify_lines(slines, [%r{ldc2 -c -of build/e.1/main.d.o(bj)? -deps=build/e.1/main.d.o(bj)?.mf main.d}])
verify_lines(slines, [%r{ldc2 -c -of build/e.1/mod.d.o(bj)? -deps=build/e.1/mod.d.o(bj)?.mf mod.d}])
verify_lines(slines, [%r{ldc2 -of hello-d.exe build/e.1/main.d.o(bj)? build/e.1/mod.d.o(bj)?}])
verify_lines(slines, [%r{ldc2 -c -of build/e.1/o/main.d.o(bj)? -deps=build/e.1/o/main.d.o(bj)?.mf main.d}])
verify_lines(slines, [%r{ldc2 -c -of build/e.1/o/mod.d.o(bj)? -deps=build/e.1/o/mod.d.o(bj)?.mf mod.d}])
verify_lines(slines, [%r{ldc2 -of hello-d.exe build/e.1/o/main.d.o(bj)? build/e.1/o/mod.d.o(bj)?}])
expect(`./hello-d.exe`.rstrip).to eq "Hello from D, value is 42!"
end
@ -694,9 +694,9 @@ EOF
result = run_rscons(args: %w[-f build-ldc2.rb])
expect(result.stderr).to eq ""
slines = lines(result.stdout)
verify_lines(slines, [%r{ldc2 -c -of build/e.1/main.d.o(bj)? -deps=build/e.1/main.d.o(bj)?.mf main.d}])
verify_lines(slines, [%r{ldc2 -c -of build/e.1/mod.d.o(bj)? -deps=build/e.1/mod.d.o(bj)?.mf mod.d}])
verify_lines(slines, [%r{ldc2 -of hello-d.exe build/e.1/main.d.o(bj)? build/e.1/mod.d.o(bj)?}])
verify_lines(slines, [%r{ldc2 -c -of build/e.1/o/main.d.o(bj)? -deps=build/e.1/o/main.d.o(bj)?.mf main.d}])
verify_lines(slines, [%r{ldc2 -c -of build/e.1/o/mod.d.o(bj)? -deps=build/e.1/o/mod.d.o(bj)?.mf mod.d}])
verify_lines(slines, [%r{ldc2 -of hello-d.exe build/e.1/o/main.d.o(bj)? build/e.1/o/mod.d.o(bj)?}])
expect(`./hello-d.exe`.rstrip).to eq "Hello from D, value is 42!"
contents = File.read("mod.d", mode: "rb").sub("42", "33")
File.open("mod.d", "wb") do |fh|
@ -705,9 +705,9 @@ EOF
result = run_rscons(args: %w[-f build-ldc2.rb])
expect(result.stderr).to eq ""
slines = lines(result.stdout)
verify_lines(slines, [%r{ldc2 -c -of build/e.1/main.d.o(bj)? -deps=build/e.1/main.d.o(bj)?.mf main.d}])
verify_lines(slines, [%r{ldc2 -c -of build/e.1/mod.d.o(bj)? -deps=build/e.1/mod.d.o(bj)?.mf mod.d}])
verify_lines(slines, [%r{ldc2 -of hello-d.exe build/e.1/main.d.o(bj)? build/e.1/mod.d.o(bj)?}])
verify_lines(slines, [%r{ldc2 -c -of build/e.1/o/main.d.o(bj)? -deps=build/e.1/o/main.d.o(bj)?.mf main.d}])
verify_lines(slines, [%r{ldc2 -c -of build/e.1/o/mod.d.o(bj)? -deps=build/e.1/o/mod.d.o(bj)?.mf mod.d}])
verify_lines(slines, [%r{ldc2 -of hello-d.exe build/e.1/o/main.d.o(bj)? build/e.1/o/mod.d.o(bj)?}])
expect(`./hello-d.exe`.rstrip).to eq "Hello from D, value is 33!"
end
@ -726,18 +726,18 @@ EOF
result = run_rscons
expect(result.stderr).to eq ""
slines = lines(result.stdout)
verify_lines(slines, [%r{gdc -c -o build/e.1/main.d.o -MMD -MF build/e.1/main.d.o.mf main.d}])
verify_lines(slines, [%r{gdc -c -o build/e.1/mod.d.o -MMD -MF build/e.1/mod.d.o.mf mod.d}])
verify_lines(slines, [%r{gdc -o hello-d.exe build/e.1/main.d.o build/e.1/mod.d.o}])
verify_lines(slines, [%r{gdc -c -o build/e.1/o/main.d.o -MMD -MF build/e.1/o/main.d.o.mf main.d}])
verify_lines(slines, [%r{gdc -c -o build/e.1/o/mod.d.o -MMD -MF build/e.1/o/mod.d.o.mf mod.d}])
verify_lines(slines, [%r{gdc -o hello-d.exe build/e.1/o/main.d.o build/e.1/o/mod.d.o}])
expect(`./hello-d.exe`.rstrip).to eq "Hello from D, value is 42!"
fcontents = File.read("mod.d", mode: "rb").sub("42", "33")
File.open("mod.d", "wb") {|fh| fh.write(fcontents)}
result = run_rscons
expect(result.stderr).to eq ""
slines = lines(result.stdout)
verify_lines(slines, [%r{gdc -c -o build/e.1/main.d.o -MMD -MF build/e.1/main.d.o.mf main.d}])
verify_lines(slines, [%r{gdc -c -o build/e.1/mod.d.o -MMD -MF build/e.1/mod.d.o.mf mod.d}])
verify_lines(slines, [%r{gdc -o hello-d.exe build/e.1/main.d.o build/e.1/mod.d.o}])
verify_lines(slines, [%r{gdc -c -o build/e.1/o/main.d.o -MMD -MF build/e.1/o/main.d.o.mf main.d}])
verify_lines(slines, [%r{gdc -c -o build/e.1/o/mod.d.o -MMD -MF build/e.1/o/mod.d.o.mf mod.d}])
verify_lines(slines, [%r{gdc -o hello-d.exe build/e.1/o/main.d.o build/e.1/o/mod.d.o}])
expect(`./hello-d.exe`.rstrip).to eq "Hello from D, value is 33!"
end
@ -813,8 +813,8 @@ EOF
test_dir("simple")
result = run_rscons(args: %w[-f register_target_in_build_hook.rb])
expect(result.stderr).to eq ""
expect(File.exist?("build/e.1/simple.c.o")).to be_truthy
expect(File.exist?("build/e.1/simple.c.o.txt")).to be_truthy
expect(File.exist?("build/e.1/o/simple.c.o")).to be_truthy
expect(File.exist?("build/e.1/o/simple.c.o.txt")).to be_truthy
expect(nr(`./simple.exe`)).to eq "This is a simple C program\n"
end
@ -823,8 +823,8 @@ EOF
File.open("other.cccc", "w") {|fh| fh.puts}
result = run_rscons(args: %w[-f cxxsuffix.rb])
expect(result.stderr).to eq ""
expect(File.exist?("build/e.1/simple.cc.o")).to be_truthy
expect(File.exist?("build/e.1/other.cccc.o")).to be_truthy
expect(File.exist?("build/e.1/o/simple.cc.o")).to be_truthy
expect(File.exist?("build/e.1/o/other.cccc.o")).to be_truthy
expect(nr(`./simple.exe`)).to eq "This is a simple C++ program\n"
end
@ -833,8 +833,8 @@ EOF
FileUtils.mv("src/one/one.c", "src/one/one.yargh")
result = run_rscons(args: %w[-f csuffix.rb])
expect(result.stderr).to eq ""
expect(File.exist?("build/e.1/src/one/one.yargh.o")).to be_truthy
expect(File.exist?("build/e.1/src/two/two.c.o")).to be_truthy
expect(File.exist?("build/e.1/o/src/one/one.yargh.o")).to be_truthy
expect(File.exist?("build/e.1/o/src/two/two.c.o")).to be_truthy
expect(nr(`./program.exe`)).to eq "Hello from two()\n"
end
@ -906,7 +906,7 @@ EOF
test_dir("simple")
result = run_rscons(args: %w[-f cvar_array.rb])
expect(result.stderr).to eq ""
expect(File.exist?("build/e.1/simple.c.o")).to be_truthy
expect(File.exist?("build/e.1/o/simple.c.o")).to be_truthy
expect(nr(`./simple.exe`)).to eq "This is a simple C program\n"
end
@ -986,7 +986,7 @@ EOF
result = run_rscons(args: %w[-f absolute_source_path.rb])
expect(result.stderr).to eq ""
slines = lines(result.stdout)
verify_lines(slines, [%r{build/e.1/.*/abs\.c.o$}])
verify_lines(slines, [%r{build/e.1/o/.*/abs\.c.o$}])
verify_lines(slines, [%r{\babs.exe\b}])
end
@ -1119,7 +1119,7 @@ EOF
result = run_rscons
expect(File.exist?("build/typical/typical.exe")).to be_truthy
expect(File.exist?("build/typical/src/one/one.c.o")).to be_truthy
expect(File.exist?("build/typical/o/src/one/one.c.o")).to be_truthy
end
it "names Environment during clone" do
@ -1127,7 +1127,7 @@ EOF
result = run_rscons(args: %w[-f clone_and_name.rb])
expect(File.exist?("build/typical/typical.exe")).to be_truthy
expect(File.exist?("build/typical/src/one/one.c.o")).to be_truthy
expect(File.exist?("build/typical/o/src/one/one.c.o")).to be_truthy
expect(Dir.exist?("build/e.1")).to be_falsey
end
@ -1136,7 +1136,7 @@ EOF
result = run_rscons(args: %w[-f clone_with_lookup.rb])
expect(File.exist?("build/typical/typical.exe")).to be_truthy
expect(File.exist?("build/typical/src/one/one.c.o")).to be_truthy
expect(File.exist?("build/typical/o/src/one/one.c.o")).to be_truthy
expect(Dir.exist?("build/first")).to be_falsey
end
@ -1549,7 +1549,7 @@ EOF
expect(result.stdout).to match /Compiling simple\.c/
expect(File.exist?("simple.o")).to be_truthy
expect(File.exist?("simple.o.mf")).to be_falsey
expect(File.exist?("build/e.1/simple.o.mf")).to be_truthy
expect(File.exist?("build/e.1/o/simple.o.mf")).to be_truthy
end
context "debugging" do
@ -1650,7 +1650,7 @@ EOF
result = run_rscons(args: %w[-f override_depfilesuffix.rb])
expect(result.stderr).to eq ""
verify_lines(lines(result.stdout), [
%r{gcc -c -o simple.o -MMD -MF build/e.1/simple.o.deppy simple.c},
%r{gcc -c -o simple.o -MMD -MF build/e.1/o/simple.o.deppy simple.c},
])
end
@ -1674,7 +1674,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 rc 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 rc lib.a build/e.1/o/one.c.o build/e.1/o/three.c.o build/e.1/o/two.c.o}])
end
it "allows passing object files as sources" do
@ -2697,13 +2697,13 @@ EOF
result = run_rscons(args: %w[-f install.rb install])
expect(result.stderr).to eq ""
expect(File.exist?("#{prefix}/bin/program.exe")).to be_truthy
expect(File.exist?("build/e.1/src/one/one.c.o")).to be_truthy
expect(File.exist?("build/e.1/o/src/one/one.c.o")).to be_truthy
result = run_rscons(args: %w[-f install.rb uninstall])
expect(result.stderr).to eq ""
expect(result.stdout).to_not match /Removing/
expect(File.exist?("#{prefix}/bin/program.exe")).to be_falsey
expect(File.exist?("build/e.1/src/one/one.c.o")).to be_truthy
expect(File.exist?("build/e.1/o/src/one/one.c.o")).to be_truthy
expect(Dir.entries(prefix)).to match_array %w[. ..]
end
end
@ -3370,4 +3370,14 @@ EOF
end
end
if RUBY_PLATFORM =~ /linux/
it "allows writing a binary to an environment's build directory with the same name as a top-level source folder" do
test_dir "typical"
result = run_rscons(args: %w[-f binary_matching_folder.rb])
expect(result.stderr).to eq ""
expect(result.status).to eq 0
expect(File.exist?("build/src/src")).to be_truthy
end
end
end