1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137
|
module FileTemplateHelpers
def template_rakefile
<<-EOF
# add rake-compiler lib dir to the LOAD_PATH
$LOAD_PATH.unshift File.expand_path(File.join(File.dirname(__FILE__), '../..', 'lib'))
require 'rubygems'
require 'rake'
# load rakefile extensions (tasks)
Dir['tasks/*.rake'].each { |f| import f }
EOF
end
def template_rake_gemspec(gem_name)
<<-EOF
require 'rubygems/package_task'
SPEC = Gem::Specification.new do |s|
s.name = "#{gem_name}"
s.version = "0.1.0"
s.summary = "#{gem_name} test gem for rake-compiler"
s.description = "#{gem_name} is a fake gem for testing under rake-compiler"
s.files = FileList["ext/**/*.{rb,c,h}", "Rakefile", "tasks/*.rake", "lib/**/*.rb"]
s.extensions = FileList["ext/**/extconf.rb"]
s.homepage = 'http://github.com/luislavena/rake-compiler'
s.rubyforge_project = 'TODO'
s.authors = ["Luis Lavena"]
s.email = ["luislavena@gmail.com"]
end
Gem::PackageTask.new(SPEC) do |pkg|
pkg.need_zip = false
pkg.need_tar = false
end
EOF
end
def template_rake_extension(extension_name, gem_spec = nil)
<<-EOF
require 'rake/extensiontask'
Rake::ExtensionTask.new("#{extension_name}"#{', SPEC' if gem_spec})
EOF
end
def template_rake_extension_with_platform(extension_name, platform)
<<-EOF
require 'rake/extensiontask'
Rake::ExtensionTask.new("#{extension_name}", SPEC) do |ext|
ext.platform = "#{platform}"
end
EOF
end
def template_rake_extension_cross_compile(extension_name, gem_spec = nil)
<<-EOF
require 'rake/extensiontask'
Rake::ExtensionTask.new("#{extension_name}"#{', SPEC' if gem_spec}) do |ext|
ext.cross_compile = true
end
EOF
end
def template_rake_extension_multi_cross_compile(extension_name)
<<-EOF
require 'rake/extensiontask'
Rake::ExtensionTask.new("#{extension_name}", SPEC) do |ext|
ext.cross_compile = true
ext.cross_platform = ['x86-mswin32', 'x86-mingw32']
end
EOF
end
def template_rake_extension_java_compile(extension_name, gem_spec = nil)
<<-EOF
require 'rake/javaextensiontask'
Rake::JavaExtensionTask.new("#{extension_name}"#{', SPEC' if gem_spec}) do |ext|
# nothing
end
EOF
end
def template_extconf(extension_name)
<<-EOF
require 'mkmf'
create_makefile("#{extension_name}")
EOF
end
def template_source_c(extension_name)
<<-EOF
#include "source.h"
void Init_#{extension_name}()
{
printf("source.c of extension #{extension_name}\\n");
}
EOF
end
def template_source_h
<<-EOF
#include "ruby.h"
EOF
end
def template_source_java(extension_name)
<<-EOF
import org.jruby.Ruby;
import org.jruby.runtime.load.BasicLibraryService;
public class #{camelize(extension_name)}Service implements BasicLibraryService {
public boolean basicLoad(final Ruby runtime) throws java.io.IOException {
HelloWorldPrinter hwp = new HelloWorldPrinter();
hwp.tellTheWorld();
return true;
}
private class HelloWorldPrinter {
void tellTheWorld() throws java.io.IOException {
System.out.println("#{camelize(extension_name)}Service.java of extension #{extension_name}\\n");
}
}
}
EOF
end
def camelize(str)
str.gsub(/(^|_)(.)/) { $2.upcase }
end
end
World(FileTemplateHelpers)
|