-
Notifications
You must be signed in to change notification settings - Fork 609
/
extensions.rake
95 lines (75 loc) · 2.22 KB
/
extensions.rake
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
require 'lib/ffi/generator_task'
desc "Build extensions from lib/ext"
task :extensions => %w[
vm/vm
kernel:build
extension:readline
extension:digest
]
# lib/etc.rb
# lib/fcntl.rb
# lib/openssl/digest.rb
# lib/syslog.rb
# lib/zlib.rb
#
# Ask the VM to build an extension from source.
#
def compile_extension(path, flags = "-d -p -I#{Dir.pwd}/vm/subtend")
cflags = Object.const_get(:FLAGS).reject {|f| f == "-Wno-deprecated" }
cflags.each {|flag| flags << " -C,#{flag}" }
command = "./bin/rbx compile #{flags} #{path}"
sh command
end
namespace :extension do
desc "Cleans all C extension libraries and build products."
task :clean do
Dir["lib/ext/**/*.{o,#{$dlext}}"].each do |f|
rm_f f, :verbose => $verbose
end
end
desc "Build the readline extension"
task :readline => "lib/ext/readline/readline.#{$dlext}"
file "lib/ext/readline/readline.#{$dlext}" => FileList[
"lib/ext/readline/build.rb",
"lib/ext/readline/readline.c",
] do
compile_extension 'lib/ext/readline'
end
desc "Build the Digest extensions"
task :digest => %w[extension:digest:md5 extension:digest:rmd160
extension:digest:sha1 extension:digest:sha2]
namespace :digest do
def digest_task name
desc "Build Digest's #{name} extension."
task name => "lib/ext/digest/#{name}/#{name}.#{$dlext}"
file "lib/ext/digest/#{name}/#{name}.#{$dlext}" =>
FileList["lib/ext/digest/#{name}/build.rb",
"lib/ext/digest/#{name}/{#{name},#{name}init}.c",
"lib/ext/digest/#{name}/#{name}.h",
"lib/ext/digest/defs.h"] do
compile_extension "lib/ext/digest/#{name}"
end
end
digest_task "md5"
digest_task "rmd160"
digest_task "sha1"
digest_task "sha2"
end
# The ones below are not used currently.
FFI::Generator::Task.new %w[
lib/etc.rb
lib/fcntl.rb
lib/openssl/digest.rb
lib/syslog.rb
lib/zlib.rb
]
task :mongrel => "lib/ext/mongrel/http11.#{$dlext}"
file "lib/ext/mongrel/http11.#{$dlext}" => FileList[
'shotgun/lib/subtend/*',
'lib/ext/mongrel/build.rb',
'lib/ext/mongrel/*.c',
'lib/ext/mongrel/*.h',
] do
compile_ruby "lib/ext/mongrel"
end
end