diff --git a/bindings/ruby/Rakefile b/bindings/ruby/Rakefile new file mode 100644 index 00000000..11e84f65 --- /dev/null +++ b/bindings/ruby/Rakefile @@ -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