/
Rakefile
103 lines (79 loc) · 2.68 KB
/
Rakefile
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
require 'rake/clean'
require 'rake/extensiontask'
require 'rubygems/package_task'
CLEAN << 'pkg' << 'tmp' << 'lib/unicode'
UPSTREAM_URL = 'http://www.yoshidam.net/unicode-%s.tar.gz'
gem_spec = eval(File.read(File.expand_path('../unicode.gemspec', __FILE__)))
gem_task = Gem::PackageTask.new(gem_spec) {|pkg|}
Rake::ExtensionTask.new('unicode_native', gem_spec) do |ext|
ext.cross_compile = true
ext.cross_platform = ['x86-mingw32', 'x86-mswin32-60']
ext.ext_dir = 'ext/unicode'
ext.lib_dir = 'lib/unicode'
end
namespace :gem do
desc 'Build all gem files'
task all: %w[clean gem gem:java gem:windows]
java_gem_spec = gem_spec.dup
java_gem_spec.platform = 'java'
java_gem_spec.extensions.clear
java_gem_spec.files.delete_if { |f| f.start_with?('ext/') }
directory java_gem_dir = gem_task.package_dir
java_gem_file = File.basename(java_gem_spec.cache_file)
java_gem_path = File.join(java_gem_dir, java_gem_file)
desc "Build the gem file #{java_gem_file}"
task java: java_gem_path
file java_gem_path => [java_gem_dir] + java_gem_spec.files do
lib_file = 'lib/unicode.rb'
tmp_file = "#{lib_file}.tmp-#{$$}"
jrb_file = lib_file.sub('.', '-java.')
begin
mv lib_file, tmp_file
ln jrb_file, lib_file
Gem::Package.build(java_gem_spec)
mv java_gem_file, java_gem_dir
ensure
mv tmp_file, lib_file if File.exist?(tmp_file)
end
end
desc 'Build native gems for Windows'
task :windows do
ENV['RUBY_CC_VERSION'] = '1.9.3:2.0.0:2.1.5:2.2.2:2.3.0'
sh 'rake cross compile'
sh 'rake cross native gem'
end
end
desc 'Update from upstream'
task :update, [:version] do |t, args|
require 'zlib'
require 'open-uri'
require 'archive/tar/minitar'
unless version = args.version || ENV['UPSTREAM_VERSION']
abort "Please specify UPSTREAM_VERSION. See #{gem_spec.homepage}."
end
io = begin
open(url = UPSTREAM_URL % version)
rescue OpenURI::HTTPError
abort "Upstream version not found: #{url}. See #{gem_spec.homepage}."
end
Archive::Tar::Minitar.open(Zlib::GzipReader.new(io)) { |tar|
basedir = File.expand_path('..', __FILE__)
extract = lambda { |entry, name, dir|
puts "Extracting `#{name}' to `#{dir || '.'}'..."
tar.extract_entry(dir ? File.join(basedir, dir) : basedir, entry)
}
tar.each { |entry|
entry.name.sub!(/\Aunicode\//, '')
case name = entry.full_name
when /\Atools\/|\.gemspec\z/, 'README'
extract[entry, name, nil]
when /\.(?:[ch]|map)\z/, 'extconf.rb'
extract[entry, name, 'ext/unicode']
when /\Atest/
extract[entry, name, 'test']
else
puts "Skipping `#{name}'..."
end
}
}
end