root/trunk/ext/extconf.rb

Revision 677, 5.5 kB (checked in by blackhedd, 1 year ago)

added a branch for OpenBSD, contributed by Guillaume Sellier

  • Property svn:keywords set to Id
Line 
1 # $Id$
2 #
3 #----------------------------------------------------------------------------
4 #
5 # Copyright (C) 2006-07 by Francis Cianfrocca. All Rights Reserved.
6 # Gmail: blackhedd
7 #
8 # This program is free software; you can redistribute it and/or modify
9 # it under the terms of either: 1) the GNU General Public License
10 # as published by the Free Software Foundation; either version 2 of the
11 # License, or (at your option) any later version; or 2) Ruby's License.
12 #
13 # See the file COPYING for complete licensing information.
14 #
15 #---------------------------------------------------------------------------
16 #
17 # extconf.rb for Ruby/EventMachine
18 # We have to munge LDSHARED because this code needs a C++ link.
19 #
20
21 require 'mkmf'
22
23 flags = []
24
25 case RUBY_PLATFORM.split('-',2)[1]
26 when 'mswin32', 'mingw32', 'bccwin32'
27   unless have_header('windows.h') and
28       have_header('winsock.h') and
29       have_library('kernel32') and
30       have_library('rpcrt4') and
31       have_library('gdi32')
32     exit
33   end
34
35   flags << "-D OS_WIN32"
36   flags << '-D BUILD_FOR_RUBY'
37   flags << "-EHs"
38   flags << "-GR"
39
40   dir_config('ssl')
41   if have_library('ssleay32') and
42           have_library('libeay32') and
43           have_header('openssl/ssl.h') and
44           have_header('openssl/err.h')
45     flags << '-D WITH_SSL'
46   else
47     flags << '-D WITHOUT_SSL'
48   end
49
50 when /solaris/
51   unless have_library('pthread') and
52         have_library('nsl') and
53         have_library('socket')
54           exit
55   end
56
57   flags << '-D OS_UNIX'
58   flags << '-D OS_SOLARIS8'
59   flags << '-D BUILD_FOR_RUBY'
60
61   dir_config('ssl')
62   if have_library('ssl') and
63           have_library('crypto') and
64           have_header('openssl/ssl.h') and
65           have_header('openssl/err.h')
66     flags << '-D WITH_SSL'
67   else
68     flags << '-D WITHOUT_SSL'
69   end
70
71   # on Unix we need a g++ link, not gcc.
72   CONFIG['LDSHARED'] = "$(CXX) -shared"
73
74   # Patch by Tim Pease, fixes SUNWspro compile problems.
75   if CONFIG['CC'] == 'cc'
76     $CFLAGS = CONFIG['CFLAGS'] = "-g -O2 -fPIC"
77     CONFIG['CCDLFLAGS'] = "-fPIC"
78   end
79
80 when /openbsd/ 
81   # OpenBSD branch contributed by Guillaume Sellier.
82   flags << '-DOS_UNIX'
83   flags << '-DBUILD_FOR_RUBY'
84    
85   dir_config('ssl') # here I don't know why we have to check -lcrypto before -lssl otherwise -lssl is not found
86   if have_library('crypto') and
87         have_library('ssl') and
88         have_header('openssl/ssl.h') and
89         have_header('openssl/err.h')
90     flags << '-DWITH_SSL'
91   else
92     flags << '-DWITHOUT_SSL'
93   end
94   # on Unix we need a g++ link, not gcc. On OpenBSD, linking against libstdc++ have to be explicitly done for shared libs
95   CONFIG['LDSHARED'] = "$(CXX) -shared -lstdc++"
96
97
98 when /darwin/
99   flags << '-DOS_UNIX'
100   flags << '-DBUILD_FOR_RUBY'
101
102   if have_header("sys/event.h") and have_header("sys/queue.h")
103     flags << "-DHAVE_KQUEUE"
104   end
105
106   dir_config('ssl')
107   if have_library('ssl') and
108           have_library('crypto') and
109           have_library('C') and
110           have_header('openssl/ssl.h') and
111           have_header('openssl/err.h')
112     flags << '-DWITH_SSL'
113   else
114     flags << '-DWITHOUT_SSL'
115   end
116   # on Unix we need a g++ link, not gcc.
117   # Ff line contributed by Daniel Harple.
118   CONFIG['LDSHARED'] = "$(CXX) " + CONFIG['LDSHARED'].split[1..-1].join(' ')
119
120 when /linux/
121   unless have_library('pthread')
122           exit
123   end
124
125   flags << '-DOS_UNIX'
126   flags << '-DBUILD_FOR_RUBY'
127
128   # Original epoll test is inadequate because 2.4 kernels have the header
129   # but not the code.
130   #flags << '-DHAVE_EPOLL' if have_header('sys/epoll.h')
131   if have_header('sys/epoll.h')
132           File.open("hasEpollTest.c", "w") {|f|
133                   f.puts "#include <sys/epoll.h>"
134                   f.puts "int main() { epoll_create(1024); return 0;}"
135           }
136           (e = system( "gcc hasEpollTest.c -o hasEpollTest " )) and (e = $?.to_i)
137           `rm -f hasEpollTest.c hasEpollTest`
138           flags << '-DHAVE_EPOLL' if e == 0
139   end
140
141   if have_func('rb_thread_blocking_region') and have_macro('RB_UBF_DFL', 'ruby.h')
142           flags << "-DHAVE_TBR"
143   end
144
145   dir_config('ssl', "#{ENV['OPENSSL']}/include", ENV['OPENSSL'])
146   # Check for libcrypto twice, before and after ssl. That's because on some platforms
147   # and openssl versions, libssl will emit unresolved externals from crypto. It
148   # would be cleaner to simply check crypto first, but that doesn't always work in
149   # Ruby. The order we check them doesn't seem to control the order in which they're
150   # emitted into the link command. This is pretty weird, I have to admit.
151   if have_library('crypto') and
152           have_library('ssl') and
153           have_library('crypto') and
154           have_header('openssl/ssl.h') and
155           have_header('openssl/err.h')
156     flags << '-DWITH_SSL'
157   else
158     flags << '-DWITHOUT_SSL'
159   end
160   # on Unix we need a g++ link, not gcc.
161   CONFIG['LDSHARED'] = "$(CXX) -shared"
162
163   # Modify the mkmf constant LINK_SO so the generated shared object is stripped.
164   # You might think modifying CONFIG['LINK_SO'] would be a better way to do this,
165   # but it doesn't work because mkmf doesn't look at CONFIG['LINK_SO'] again after
166   # it initializes.
167   linkso = Object.send :remove_const, "LINK_SO"
168   LINK_SO = linkso + "; strip $@"
169
170 else
171   unless have_library('pthread')
172           exit
173   end
174
175   flags << '-DOS_UNIX'
176   flags << '-DBUILD_FOR_RUBY'
177
178   if have_header("sys/event.h") and have_header("sys/queue.h")
179     flags << "-DHAVE_KQUEUE"
180   end
181
182   dir_config('ssl')
183   if have_library('ssl') and
184           have_library('crypto') and
185           have_header('openssl/ssl.h') and
186           have_header('openssl/err.h')
187     flags << '-DWITH_SSL'
188   else
189     flags << '-DWITHOUT_SSL'
190   end
191   # on Unix we need a g++ link, not gcc.
192   CONFIG['LDSHARED'] = "$(CXX) -shared"
193
194 end
195
196 if $CPPFLAGS
197   $CPPFLAGS += ' ' + flags.join(' ')
198 else
199   $CFLAGS += ' ' + flags.join(' ')
200 end
201
202
203 create_makefile "rubyeventmachine"
Note: See TracBrowser for help on using the browser.