forked from rubinius/rubinius
/
Rakefile
188 lines (143 loc) · 4.85 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
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
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
# NOTE! When updating this file, also update INSTALL, if necessary.
# NOTE! Please keep your tasks grouped together.
if ENV["RUBYLIB"]
STDERR.puts "ERROR: Please unset RUBYLIB to build Rubinius"
exit 1
end
# Wipe out CDPATH, it interferes with building in some cases,
# see http://github.com/evanphx/rubinius/issues#issue/555
if ENV["CDPATH"]
ENV.delete("CDPATH")
end
$trace ||= false
$VERBOSE = true
$verbose = Rake.application.options.trace || ARGV.delete("-v")
if !$verbose and respond_to?(:verbose)
verbose(false) if verbose() == :default
end
$:.unshift File.expand_path("../", __FILE__)
config_rb = File.expand_path "../config.rb", __FILE__
config_h = File.expand_path "../vm/gen/config.h", __FILE__
unless File.exists?(config_rb) and File.exists?(config_h)
STDERR.puts "Please run ./configure first"
exit 1
end
require config_rb
BUILD_CONFIG = Rubinius::BUILD_CONFIG
unless BUILD_CONFIG[:config_version] == 24
STDERR.puts "Your configuration is outdated, please run ./configure first"
exit 1
end
# Yes, this is duplicated from the configure script for now.
unless BUILD_CONFIG[:which_ruby] == :ruby or BUILD_CONFIG[:which_ruby] == :rbx
STDERR.puts "Sorry, building Rubinius requires MRI or Rubinius"
exit 1
end
bin = RbConfig::CONFIG["RUBY_INSTALL_NAME"] || RbConfig::CONFIG["ruby_install_name"]
bin << (RbConfig::CONFIG['EXEEXT'] || RbConfig::CONFIG['exeext'] || '')
build_ruby = File.join(RbConfig::CONFIG['bindir'], bin)
unless BUILD_CONFIG[:build_ruby] == build_ruby
STDERR.puts "Sorry, but you need to build with the same Ruby version it was configured with"
STDERR.puts "Please run ./configure again"
exit 1
end
# Set the build compiler to the configured compiler unless
# the compiler is set via CC environment variable.
ENV['CC'] = BUILD_CONFIG[:cc] unless ENV['CC']
ENV['CXX'] = BUILD_CONFIG[:cxx] unless ENV['CXX']
$dlext = RbConfig::CONFIG["DLEXT"]
task :default => %w[build vm:test] do
unless File.directory? BUILD_CONFIG[:runtime]
# Setting these enables the specs to run when rbx has been configured
# to be installed, but rake install has not been run yet.
ENV["RBX_RUNTIME"] = File.expand_path "../runtime", __FILE__
ENV["RBX_LIB"] = File.expand_path "../lib", __FILE__
ENV["CFLAGS"] = "-Ivm/capi"
end
sh "bin/mspec ci --background --agent"
end
# See vm.rake for more information
desc "Build everything that needs to be built at default level."
task :build => ["build:normal", "gem_bootstrap"]
desc "Recompile all ruby system files"
task :rebuild => %w[clean build]
desc "Use to run Rubinius in CI"
task :ci do
unless system("rake -q")
puts "<< ERROR IN CI, CLEANING AND RERUNNING >>"
system "rake -q clean"
system "find . -name *.rbc -delete"
sh "rake -q"
end
end
desc 'Remove rubinius build files'
task :clean => %w[
vm:clean
kernel:clean
clean:crap
extensions:clean
]
desc 'Remove rubinius build files and external library build files'
task :distclean => %w[
clean
vm:distclean
]
namespace :clean do
desc "Cleans up editor files and other misc crap"
task :crap do
files = (Dir["*~"] + Dir["**/*~"]).uniq
rm_f files, :verbose => $verbose unless files.empty?
end
end
desc 'Move the preinstalled gem setup into place'
task :gem_bootstrap do
unless File.directory?("gems/rubinius")
sh "mkdir -p gems/rubinius"
sh "cp -r preinstalled-gems/bin gems/bin"
sh "cp -r preinstalled-gems/data gems/rubinius/preinstalled"
end
end
desc "Run the Rubinius documentation website"
task :docs do
require 'kernel/delta/options'
require 'rbconfig'
require 'webrick'
require 'lib/rubinius/documentation'
Rubinius::Documentation.main
end
desc "Documents why no spec tasks exist"
task :spec do
puts <<-EOM
The spec and spec:xxx commands are deprecated (and removed).
Use bin/mspec directly. MSpec provides 'pseudo-directories',
which are labels that refer to sets of specs to run. Refer
to spec/default.mspec and the MSpec docs for full details.
The following are likely scenarios for running the specs.
Unless -t <target> is passed to mspec, bin/rbx is run.
Run the CI specs that are run with the default 'rake' command
bin/mspec ci
Run all the RubySpec specs but not Rubinius-specific ones:
bin/mspec
Run all the RubySpec Array specs:
bin/mspec core/array
OR
bin/mspec spec/ruby/core/array
Run spec/ruby/core/array/append_spec.rb:
bin/mspec core/array/append
OR
bin/mspec spec/ruby/core/array/append_spec.rb
Run all the compiler specs:
bin/mspec :compiler
Run all the [language, core, library, capi] specs:
bin/mspec :language
bin/mspec :core
...
Run all the spec/ruby specs using the 'ruby' executable on your path
bin/mspec -tr :ruby
EOM
end
desc "Print list of items marked to-do in kernel/ (@todo|TODO)"
task :todos do
sh "grep", "-Rn", "@todo", "kernel"
sh "grep", "-Rn", "TODO", "kernel"
end