-
Notifications
You must be signed in to change notification settings - Fork 61
/
extconf.rb
111 lines (94 loc) · 3.2 KB
/
extconf.rb
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
CWD = File.expand_path(File.dirname(__FILE__))
def sys(cmd)
puts " -- #{cmd}"
unless ret = xsystem(cmd)
raise "#{cmd} failed, please report to perftools@tmm1.net with pastie.org link to #{CWD}/mkmf.log and #{CWD}/src/google-perftools-1.6/config.log"
end
ret
end
require 'mkmf'
require 'fileutils'
if RUBY_VERSION >= "1.9"
begin
require "ruby_core_source"
rescue LoadError
STDERR.puts "\n\n"
STDERR.puts "***************************************************************************************"
STDERR.puts "******************** PLEASE RUN gem install ruby_core_source FIRST ********************"
STDERR.puts "***************************************************************************************"
exit(1)
end
end
perftools = File.basename('google-perftools-1.6.tar.gz')
dir = File.basename(perftools, '.tar.gz')
puts "(I'm about to compile google-perftools.. this will definitely take a while)"
ENV["PATCH_GET"] = '0'
Dir.chdir('src') do
FileUtils.rm_rf(dir) if File.exists?(dir)
sys("tar zxvf #{perftools}")
Dir.chdir(dir) do
if ENV['DEV']
sys("git init")
sys("git add .")
sys("git commit -m 'initial source'")
end
[ ['perftools', true],
['perftools-notests', true],
['perftools-pprof', true],
['perftools-gc', true],
['perftools-osx', RUBY_PLATFORM =~ /darwin/],
['perftools-debug', true],
['perftools-objects', true],
['perftools-frames', true]
].each do |patch, apply|
if apply
sys("patch -p1 < ../../../patches/#{patch}.patch")
sys("git commit -am '#{patch}'") if ENV['DEV']
end
end
sys("sed -i -e 's,SpinLock,ISpinLock,g' src/*.cc src/*.h src/base/*.cc src/base/*.h")
sys("git commit -am 'rename spinlock'") if ENV['DEV']
end
Dir.chdir(dir) do
FileUtils.cp 'src/pprof', '../../../bin/'
FileUtils.chmod 0755, '../../../bin/pprof'
end
Dir.chdir(dir) do
if RUBY_PLATFORM =~ /darwin10/
ENV['CFLAGS'] = ENV['CXXFLAGS'] = '-D_XOPEN_SOURCE'
end
sys("./configure --disable-heap-profiler --disable-heap-checker --disable-debugalloc --disable-shared")
sys("make")
FileUtils.cp '.libs/libprofiler.a', '../../librubyprofiler.a'
end
end
$LIBPATH << CWD
$libs = append_library($libs, 'rubyprofiler')
def add_define(name)
$defs.push("-D#{name}")
end
case RUBY_PLATFORM
when /darwin/, /linux/, /freebsd/
CONFIG['LDSHARED'] = "$(CXX) " + CONFIG['LDSHARED'].split[1..-1].join(' ')
end
if RUBY_VERSION >= "1.9"
add_define 'RUBY19'
hdrs = proc {
have_header("method.h") # exists on 1.9.2
have_header("vm_core.h") and
have_header("iseq.h") and
have_header("insns.inc") and
have_header("insns_info.inc")
}
unless Ruby_core_source::create_makefile_with_core(hdrs, "perftools")
STDERR.puts "\n\n"
STDERR.puts "***************************************************************************************"
STDERR.puts "********************** Ruby_core_source::create_makefile FAILED ***********************"
STDERR.puts "***************************************************************************************"
exit(1)
end
else
add_define 'RUBY18'
have_func('rb_during_gc', 'ruby.h')
create_makefile 'perftools'
end