2012-06-06 10:24:04 +01:00
|
|
|
require 'rake_utils/debian'
|
|
|
|
include RakeUtils::DSL
|
2012-05-30 17:35:07 +01:00
|
|
|
|
2012-05-31 12:12:32 +01:00
|
|
|
DEBUG = ENV.has_key?('DEBUG') &&
|
|
|
|
%w|yes y ok 1 true t|.include?(ENV['DEBUG'])
|
2012-05-16 01:27:14 +01:00
|
|
|
|
2012-05-30 15:06:06 +01:00
|
|
|
ALL_SOURCES =FileList['src/*']
|
|
|
|
SOURCES = ALL_SOURCES.select { |c| c =~ /\.c$/ }
|
2012-05-30 09:51:20 +01:00
|
|
|
OBJECTS = SOURCES.pathmap( "%{^src,build}X.o" )
|
|
|
|
|
2012-05-16 01:27:14 +01:00
|
|
|
LIBS = %w( pthread )
|
|
|
|
CCFLAGS = %w( -Wall )
|
|
|
|
LDFLAGS = []
|
2012-05-20 14:38:46 +01:00
|
|
|
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
|
|
|
|
|
2012-05-27 14:40:16 +01:00
|
|
|
desc "Build flexnbd binary"
|
2012-05-30 09:51:20 +01:00
|
|
|
task :flexnbd => 'build/flexnbd'
|
2012-05-31 14:01:49 +01:00
|
|
|
task :build => :flexnbd
|
|
|
|
task :default => :flexnbd
|
2012-05-16 01:27:14 +01:00
|
|
|
|
2012-05-20 14:38:46 +01:00
|
|
|
namespace "test" do
|
2012-05-27 14:40:16 +01:00
|
|
|
desc "Run all tests"
|
2012-05-24 01:39:35 +01:00
|
|
|
task 'run' => ["unit", "scenarios"]
|
2012-05-30 09:51:20 +01:00
|
|
|
|
2012-05-27 14:40:16 +01:00
|
|
|
desc "Build C tests"
|
2012-05-30 09:51:20 +01:00
|
|
|
task 'build' => TEST_MODULES.map { |n| "build/tests/check_#{n}" }
|
|
|
|
|
2012-05-27 14:40:16 +01:00
|
|
|
desc "Run C tests"
|
2012-05-24 01:39:35 +01:00
|
|
|
task 'unit' => 'build' do
|
2012-05-20 14:38:46 +01:00
|
|
|
TEST_MODULES.each do |n|
|
|
|
|
ENV['EF_DISABLE_BANNER'] = '1'
|
2012-05-30 09:51:20 +01:00
|
|
|
sh "build/tests/check_#{n}"
|
2012-05-20 14:38:46 +01:00
|
|
|
end
|
|
|
|
end
|
2012-05-30 09:51:20 +01:00
|
|
|
|
2012-05-27 14:40:16 +01:00
|
|
|
desc "Run NBD test scenarios"
|
|
|
|
task 'scenarios' => 'flexnbd' do
|
2012-05-24 01:39:35 +01:00
|
|
|
sh "cd tests; ruby nbd_scenarios"
|
|
|
|
end
|
2012-05-20 14:38:46 +01:00
|
|
|
end
|
|
|
|
|
2012-05-30 09:51:20 +01:00
|
|
|
|
2012-05-20 14:38:46 +01:00
|
|
|
def gcc_link(target, objects)
|
2012-05-30 09:51:20 +01:00
|
|
|
FileUtils.mkdir_p File.dirname( target )
|
|
|
|
|
2012-05-16 01:27:14 +01:00
|
|
|
sh "gcc #{LDFLAGS.join(' ')} "+
|
|
|
|
LIBS.map { |l| "-l#{l}" }.join(" ")+
|
2012-05-30 09:51:20 +01:00
|
|
|
" -I src" +
|
2012-05-20 14:38:46 +01:00
|
|
|
" -o #{target} "+
|
|
|
|
objects.join(" ")
|
|
|
|
end
|
|
|
|
|
2012-05-30 09:51:20 +01:00
|
|
|
rule 'build/flexnbd' => OBJECTS do |t|
|
2012-05-20 14:38:46 +01:00
|
|
|
gcc_link(t.name, t.sources)
|
|
|
|
end
|
|
|
|
|
2012-05-30 09:51:20 +01:00
|
|
|
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
|
|
|
|
|
2012-05-30 09:51:20 +01:00
|
|
|
|
|
|
|
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
|
|
|
|
|
2012-05-27 14:40:16 +01:00
|
|
|
desc "Remove all build targets, binaries and temporary files"
|
2012-05-30 17:35:07 +01:00
|
|
|
task :clean do
|
|
|
|
sh "rm -rf *~ build"
|
|
|
|
end
|
|
|
|
|
2012-06-06 10:24:04 +01:00
|
|
|
namespace :pkg do
|
|
|
|
deb do |t|
|
2012-05-30 17:35:07 +01:00
|
|
|
t.code_files = ALL_SOURCES + ["Rakefile"]
|
|
|
|
t.pkg_name = "flexnbd"
|
|
|
|
t.generate_changelog!
|
|
|
|
end
|
2012-05-16 01:27:14 +01:00
|
|
|
end
|
2012-05-31 12:12:32 +01:00
|
|
|
|