Files
flexnbd-c/Rakefile

83 lines
1.7 KiB
Ruby
Raw Normal View History

2012-05-16 01:27:14 +01:00
DEBUG = true
SOURCES = FileList['src/*.c']
OBJECTS = SOURCES.pathmap( "%{^src,build}X.o" )
2012-05-16 01:27:14 +01:00
LIBS = %w( pthread )
CCFLAGS = %w( -Wall )
LDFLAGS = []
LIBCHECK = "/usr/lib/libcheck.a"
TEST_MODULES = Dir["tests/check_*.c"].map { |n| n[12..-3] }
2012-05-16 01:27:14 +01:00
if DEBUG
LDFLAGS << ["-g"]
CCFLAGS << ["-g -DDEBUG"]
end
desc "Build flexnbd binary"
task :flexnbd => 'build/flexnbd'
2012-05-16 01:27:14 +01:00
namespace "test" do
desc "Run all tests"
task 'run' => ["unit", "scenarios"]
desc "Build C tests"
task 'build' => TEST_MODULES.map { |n| "build/tests/check_#{n}" }
desc "Run C tests"
task 'unit' => 'build' do
TEST_MODULES.each do |n|
ENV['EF_DISABLE_BANNER'] = '1'
sh "build/tests/check_#{n}"
end
end
desc "Run NBD test scenarios"
task 'scenarios' => 'flexnbd' do
sh "cd tests; ruby nbd_scenarios"
end
end
def gcc_link(target, objects)
FileUtils.mkdir_p File.dirname( target )
2012-05-16 01:27:14 +01:00
sh "gcc #{LDFLAGS.join(' ')} "+
LIBS.map { |l| "-l#{l}" }.join(" ")+
" -I src" +
" -o #{target} "+
objects.join(" ")
end
rule 'build/flexnbd' => OBJECTS do |t|
gcc_link(t.name, t.sources)
end
TEST_MODULES.each do |m|
deps = ["tests/check_#{m}.c", "build/util.o"]
maybe_obj_name = "build/#{m}.o"
deps << maybe_obj_name if OBJECTS.include?( maybe_obj_name )
file "build/tests/check_#{m}" => deps do |t|
gcc_link(t.name, deps + [LIBCHECK])
end
2012-05-16 01:27:14 +01:00
end
OBJECTS.zip( SOURCES ).each do |o,c|
file o => c do |t|
FileUtils.mkdir_p File.dirname( o )
sh "gcc -Isrc -c #{CCFLAGS.join(' ')} -o #{o} #{c} "
end
2012-05-16 01:27:14 +01:00
end
desc "Remove all build targets, binaries and temporary files"
2012-05-16 01:27:14 +01:00
rule 'clean' do
sh "rm -rf *~ build " + (
TEST_MODULES.map { |n| ["tests/check_#{n}", "tests/check_#{n}.o"] }.flatten
).
join(" ")
2012-05-16 01:27:14 +01:00
end