-
Notifications
You must be signed in to change notification settings - Fork 75
/
extconf.rb
89 lines (71 loc) · 2.3 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
require 'mkmf'
require 'rbconfig'
require 'fileutils'
HERE = File.expand_path(File.dirname(__FILE__))
BUNDLE = Dir.glob("zkc-*.tar.gz").first
BUNDLE_PATH = File.join(HERE, 'c')
$EXTRA_CONF = ''
# CLANG!!!! jeez, if apple would only *stop* "thinking different"
if cc = RbConfig::CONFIG['CC'] && cc =~ /^gcc/
$CC = cc
$EXTRA_CONF = "#{$EXTRA_CONF} CC=#{$CC}"
end
$CFLAGS = "#{$CFLAGS}".gsub("$(cflags)", "").gsub("-arch ppc", "")
$LDFLAGS = "#{$LDFLAGS}".gsub("$(ldflags)", "").gsub("-arch ppc", "")
$CXXFLAGS = " -std=gnu++98 #{$CFLAGS}"
$CPPFLAGS = $ARCH_FLAG = $DLDFLAGS = ""
if RUBY_VERSION == '1.8.7'
$CFLAGS << ' -DZKRB_RUBY_187'
end
ZK_DEBUG = (ENV['DEBUG'] or ARGV.any? { |arg| arg == '--debug' })
ZK_DEV = ENV['ZK_DEV']
DEBUG_CFLAGS = " -O0 -ggdb3 -DHAVE_DEBUG"
if ZK_DEBUG
$stderr.puts "*** Setting debug flags. ***"
$EXTRA_CONF = "#{$EXTRA_CONF} --enable-debug"
$CFLAGS.gsub!(/ -O[^0] /, ' ')
$CFLAGS << DEBUG_CFLAGS
end
$includes = " -I#{HERE}/include"
$libraries = " -L#{HERE}/lib -L#{RbConfig::CONFIG['libdir']}"
$CFLAGS = "#{$includes} #{$libraries} #{$CFLAGS}"
$LDFLAGS = "#{$libraries} #{$LDFLAGS}"
$LIBPATH = ["#{HERE}/lib"]
$DEFLIBPATH = []
def safe_sh(cmd)
puts cmd
system(cmd)
unless $?.exited? and $?.success?
raise "command failed! #{cmd}"
end
end
Dir.chdir(HERE) do
if File.exist?("lib")
puts "Zkc already built; run 'rake clobber' in ext/ first if you need to rebuild."
else
puts "Building zkc."
unless File.exists?('c')
puts(cmd = "tar xzf #{BUNDLE} 2>&1")
raise "'#{cmd}' failed" unless system(cmd)
end
Dir.chdir(BUNDLE_PATH) do
configure = "./configure --prefix=#{HERE} --with-pic --without-cppunit --disable-dependency-tracking #{$EXTRA_CONF} 2>&1"
configure = "env CFLAGS='#{DEBUG_CFLAGS}' #{configure}" if ZK_DEBUG
safe_sh(configure)
safe_sh("make 2>&1")
safe_sh("make install 2>&1")
end
system("rm -rf #{BUNDLE_PATH}") unless ZK_DEBUG or ZK_DEV
end
end
# Absolutely prevent the linker from picking up any other zookeeper_mt
Dir.chdir("#{HERE}/lib") do
%w[st mt].each do |stmt|
%w[a la].each do |ext|
system("cp -f libzookeeper_#{stmt}.#{ext} libzookeeper_#{stmt}_gem.#{ext}")
end
end
end
$LIBS << " -lzookeeper_st_gem"
$CFLAGS << ' -Wall' if ZK_DEV
create_makefile 'zookeeper_c'