Added a nice Rakefile
git-svn-id: https://sfml.svn.sourceforge.net/svnroot/sfml/branches/sfml2@1747 4e206d99-4929-0410-ac5d-dfc041789085
This commit is contained in:
parent
0aafc6b6ba
commit
20e308466a
158
bindings/ruby/Rakefile
Normal file
158
bindings/ruby/Rakefile
Normal file
@ -0,0 +1,158 @@
|
||||
require 'rake'
|
||||
require 'rubygems'
|
||||
require 'rdoc/task'
|
||||
require 'rake/clean'
|
||||
require 'rake/gempackagetask'
|
||||
require 'rbconfig'
|
||||
require 'pp'
|
||||
include Config
|
||||
include Rake
|
||||
|
||||
# Configurable section
|
||||
RUBYSFML_VERSION = "2.0"
|
||||
SO_SRCS = {'audio' => FileList.new('sfml-audio/audio/*.cpp'),
|
||||
'graphics' => FileList.new('sfml-graphics/graphics/*.cpp'),
|
||||
'window' => FileList.new('sfml-window/window/*.cpp'),
|
||||
'system' => FileList.new('sfml-system/system/*.cpp'),
|
||||
'all' => FileList.new('sfml-all/all/*.cpp') }
|
||||
OBJDIR = 'obj'
|
||||
SODIR = 'sfml'
|
||||
|
||||
spec = Gem::Specification.new do |s|
|
||||
s.platform = Gem::Platform::CURRENT
|
||||
s.name = "rubysfml"
|
||||
s.version = RUBYSFML_VERSION
|
||||
s.author = "Henrik Valter Vogelius Hansson"
|
||||
s.email = "groogy@groogy.se"
|
||||
s.summary = "Ruby bindings for SFML 2.0"
|
||||
s.has_rdoc = true
|
||||
s.requirements << 'none'
|
||||
s.require_path = ''
|
||||
s.files = FileList.new do |fl|
|
||||
fl.include("sfml-audio/audio/*.cpp", "sfml-audio/audio/*.hpp")
|
||||
fl.include("sfml-graphics/graphics/*.cpp", "sfml-graphics/graphics/*.hpp")
|
||||
fl.include("sfml-window/window/*.cpp", "sfml-window/window/*.hpp")
|
||||
fl.include("sfml-system/system/*.cpp", "sfml-system/system/*.hpp")
|
||||
fl.include("sfml-all/all/*.cpp", "sfml-all/all/*.hpp")
|
||||
end
|
||||
s.extensions = ["Rakefile"]
|
||||
|
||||
s.extra_rdoc_files = FileList.new do |fl|
|
||||
fl.include "doc/*.rdoc"
|
||||
end
|
||||
end
|
||||
verbose(false)
|
||||
|
||||
# Do not touch
|
||||
SO_OBJS = {}
|
||||
SO_SRCS.each do |file, list|
|
||||
SO_OBJS[file] = list.collect { |fn| File.join("#{OBJDIR}/#{file}", File.basename(fn).ext('o')) }
|
||||
end
|
||||
|
||||
SO_LIBS = []
|
||||
SO_SRCS.each_key {|file| SO_LIBS << "#{SODIR}/#{file}.so"}
|
||||
SO_OBJS.each_value {|list| CLEAN.include(list)}
|
||||
SO_LIBS.each {|so_file| CLOBBER.include(so_file)}
|
||||
CLOBBER.include(OBJDIR, SODIR)
|
||||
|
||||
|
||||
# Sets the default task to build
|
||||
task :default => [:build]
|
||||
|
||||
desc "Compiles and builds the library"
|
||||
task :build
|
||||
desc "Recompiles the library"
|
||||
task :rebuild
|
||||
desc "Installs the generated files"
|
||||
task :install
|
||||
desc "Uninstalls the generated files"
|
||||
task :uninstall
|
||||
|
||||
task :clean do
|
||||
puts "Cleaning out temporary generated files"
|
||||
end
|
||||
|
||||
task :clobber do
|
||||
puts "Cleaning out all generated files"
|
||||
end
|
||||
|
||||
task :rebuild => [:clobber, :build] do
|
||||
end
|
||||
|
||||
Rake::GemPackageTask.new(spec) do |pkg|
|
||||
pkg.need_tar_bz2 = true
|
||||
end
|
||||
|
||||
RDoc::Task.new do |rd|
|
||||
rd.title = "RSFML #{RUBYSFML_VERSION} Documentation"
|
||||
rd.rdoc_files.include(SO_SRCS.values)
|
||||
rd.options << '--line-numbers' << '--quiet' << '--all'
|
||||
rd.rdoc_dir = "doc"
|
||||
end
|
||||
|
||||
CFLAGS = CONFIG['CFLAGS']
|
||||
CC = CONFIG['CC']
|
||||
INSTALL = CONFIG['INSTALL_PROGRAM']
|
||||
LOCATION = CONFIG['sitearchdir'] + '/sfml'
|
||||
|
||||
RUBYSFML_INC = "sfml-system/system"
|
||||
SFML_INC = ENV.key?('SFML_INCLUDE') ? ENV['SFML_INCLUDE'] : '../../include'
|
||||
SFML_LIB = ENV.key?('SFML_LIB') ? ENV['SFML_LIB'] : '../../lib'
|
||||
SFML_LIBS = '-lsfml-audio -lsfml-graphics -lsfml-window -lsfml-system'
|
||||
RUBY_INC = CONFIG['rubyhdrdir']
|
||||
RUBY_LIB = (CONFIG['ENABLE_SHARED'] == 'yes' ? CONFIG['LIBRUBYARG_SHARED'] : CONFIG['LIBRUBYARG_STATIC']) + ' ' + CONFIG['SOLIBS']
|
||||
RUBY_LIB_PATH = CONFIG['libdir']
|
||||
LINK = CONFIG['LDSHARED']
|
||||
LINK_FLAGS = CONFIG['DLDFLAGS']
|
||||
|
||||
SO_SRCS.each_key {|dir| directory "#{OBJDIR}/#{dir}"}
|
||||
directory SODIR
|
||||
directory LOCATION
|
||||
|
||||
SO_SRCS.each do |so_file, list|
|
||||
begin
|
||||
list.each do |srcfile|
|
||||
objdir = "#{OBJDIR}/#{so_file}"
|
||||
objfile = File.join(objdir, File.basename(srcfile).ext('o'))
|
||||
file objfile => [srcfile, objdir] do
|
||||
puts "Compiling #{File.basename(srcfile)}"
|
||||
sh "#{CC} #{CFLAGS} -c #{srcfile} -o #{objfile} -I#{SFML_INC} -I#{RUBY_INC} -I#{RUBY_INC}/#{CONFIG['arch']} -I#{RUBYSFML_INC}"
|
||||
end
|
||||
end
|
||||
rescue
|
||||
end
|
||||
end
|
||||
|
||||
SO_OBJS.each do |so_file, objs|
|
||||
begin
|
||||
file "#{SODIR}/#{so_file}.so" => [*objs, SODIR] do
|
||||
puts "Linking files to create #{so_file}.so"
|
||||
sh "#{LINK} -o #{SODIR}/#{so_file}.so #{objs} -L. -L#{SFML_LIB} -L#{RUBY_LIB_PATH} #{LINK_FLAGS} #{RUBY_LIB} #{SFML_LIBS}"
|
||||
end
|
||||
rescue
|
||||
end
|
||||
end
|
||||
|
||||
task :install => [:build, LOCATION] do
|
||||
puts "Installing library"
|
||||
begin
|
||||
SO_SRCS.each_key do |so_file|
|
||||
sh "#{INSTALL} #{SODIR}/#{so_file}.so #{LOCATION}"
|
||||
end
|
||||
rescue
|
||||
end
|
||||
end
|
||||
|
||||
task :uninstall do
|
||||
puts "Uninstalling library"
|
||||
begin
|
||||
SO_SRCS.each_key do |so_file|
|
||||
sh "rm -f #{LOCATION}/#{so_file}.so"
|
||||
end
|
||||
sh "rm -rf #{LOCATION}"
|
||||
rescue
|
||||
end
|
||||
end
|
||||
|
||||
task :build => SO_LIBS do
|
||||
end
|
Loading…
Reference in New Issue
Block a user