summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authoreban <eban@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2002-09-08 10:00:43 +0000
committereban <eban@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2002-09-08 10:00:43 +0000
commitb8ff4a843e4dbf1fab1f033a660f80cccf6a095d (patch)
tree9516ab54f8cd4b5c5f2a0e97b0d1cb9567cba6c7 /lib
parentd76fdc013bea0cd7881fb2d49e94264c834f374b (diff)
* lib/mkmf.rb (have_struct_member): moved from ext/socket/extconf.rb.
* ext/socket/extconf.rb: use macro_defined? instead of egrep_cpp. * ext/etc/extconf.rb: use have_struct_member. * ext/etc/etc.c: add prefix HAVE_ST_ to PW_ macros. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@2821 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib')
-rw-r--r--lib/mkmf.rb50
1 files changed, 42 insertions, 8 deletions
diff --git a/lib/mkmf.rb b/lib/mkmf.rb
index 68b324a825..a0e01c47c7 100644
--- a/lib/mkmf.rb
+++ b/lib/mkmf.rb
@@ -204,14 +204,6 @@ def try_compile(src, opt="")
end
end
-def macro_defined?(macro, src, opt="")
- try_cpp(src + <<EOP, opt)
-#ifndef #{macro}
-# error
-#endif
-EOP
-end
-
def try_cpp(src, opt="")
cfile = open("conftest.c", "w")
cfile.print src
@@ -252,6 +244,14 @@ def egrep_cpp(pat, src, opt="")
end
end
+def macro_defined?(macro, src, opt="")
+ try_cpp(src + <<EOP, opt)
+#ifndef #{macro}
+# error
+#endif
+EOP
+end
+
def try_run(src, opt="")
begin
if try_link0(src, opt)
@@ -439,6 +439,40 @@ SRC
return true
end
+def have_struct_member(type, member, header=nil)
+ message "checking for #{type}.#{member}... "
+
+ src =
+ if /mswin32|bccwin32|mingw/ =~ RUBY_PLATFORM
+ r = <<"SRC"
+#include <windows.h>
+#include <winsock.h>
+SRC
+ else
+ ""
+ end
+ unless header.nil?
+ header = [header] unless header.kind_of? Array
+ header.each {|h|
+ src << <<"SRC"
+#include <#{h}>
+SRC
+ }
+ end
+ src << <<"SRC"
+int main() { return 0; }
+int s = (char *)&((#{type}*)0)->#{member} - (char *)0;
+SRC
+ r = try_compile(src)
+ unless r
+ message "no\n"
+ return false
+ end
+ $defs.push(format("-DHAVE_ST_%s", member.upcase))
+ message "yes\n"
+ return true
+end
+
def find_executable(bin, path = nil)
message "checking for #{bin}... "