# -*- coding: utf-8 -*- require "rake/clean" require "rake/loaders/makefile" CC = "g++" cflags = "-g -O2 -fno-default-inline -Wall -g" TOPDIR = "." ldflags = "-DHAVE_CONFIG_H " ldflags += "-L./test/gtest/gtest-all" includes = " " includes += "-I. -I." # lists of compile dependency objects SRCS = FileList["./src/**/*.cpp", "./lib/**/*.cpp"] OBJS = SRCS.ext("o") DEPS = SRCS.ext("po") TEST_SRCS = FileList["./test/*.cpp"] TEST_OBJECTS = TEST_SRCS.ext("o") TEST_OBJECTS.include(OBJS) TEST_DEPS = TEST_SRCS.ext("po") TEST_PROGRAMS = TEST_SRCS.ext("") EXEEXT = "" # lists of clean objects CLEAN.include(OBJS, TEST_OBJECTS) CLOBBER.include(TEST_PROGRAMS) task "default" => ["compile"] task "test" => ["compile", "test_execute"] desc "Compile all sources " task "compile" => OBJS do |t| end rule "_test#{EXEEXT}" => TEST_OBJECTS do |t| base = File.split(t.name); base[1] = File.basename(base[1], EXEEXT) + ".o" sh "#{CC} -o #{t.name} #{ldflags} #{cflags} #{includes} #{OBJS.join(' ')} ./test/gtest/gtest-all.o #{File.join(base)} " end rule '.o' => '.cpp' do |t| depname = File.split(t.source) depname[1] = File.basename(depname[1], ".cpp") + ".po" sh "#{CC} -MD -MF #{File.join(depname[0], depname[1])} #{ldflags} #{cflags} #{includes} -c #{t.source} -o #{t.name}" end rule '.h' => '.cpp' do |t| end loader = Rake::MakefileLoader.new DEPS.each do |f| loader.load(f) if File.exists? f end TEST_DEPS.each do |f| loader.load(f) if File.exists? f end desc "run all test program in `TEST_PROGRAMS`" task :test_execute => TEST_PROGRAMS do |t| t.prerequisites.each { |f| sh "#{f} --gtest_color=yes" } end