[前][次][番号順一覧][スレッド一覧]

ruby-changes:10084

From: akr <ko1@a...>
Date: Sat, 17 Jan 2009 19:19:28 +0900 (JST)
Subject: [ruby-changes:10084] Ruby:r21627 (trunk): * ext/socket/mkconstants.rb: generate a header file for generated

akr	2009-01-17 19:19:03 +0900 (Sat, 17 Jan 2009)

  New Revision: 21627

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=21627

  Log:
    * ext/socket/mkconstants.rb: generate a header file for generated
      functions.
    * ext/socket/rubysocket.h: include constdefs.h.  don't declare
      generated functions.
    
    * ext/socket/constants.c: include constdefs.c instead of constants.h.
    
    * ext/socket/depend: dependency updated.

  Modified directories:
    trunk/ext/socket/
  Modified files:
    trunk/ChangeLog
    trunk/ext/socket/constants.c
    trunk/ext/socket/depend
    trunk/ext/socket/mkconstants.rb
    trunk/ext/socket/rubysocket.h

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 21626)
+++ ChangeLog	(revision 21627)
@@ -1,3 +1,15 @@
+Sat Jan 17 19:16:16 2009  Tanaka Akira  <akr@f...>
+
+	* ext/socket/mkconstants.rb: generate a header file for generated
+	  functions.
+
+	* ext/socket/rubysocket.h: include constdefs.h.  don't declare
+	  generated functions.
+
+	* ext/socket/constants.c: include constdefs.c instead of constants.h.
+
+	* ext/socket/depend: dependency updated.
+
 Sat Jan 17 17:58:22 2009  Yuki Sonoda (Yugui)  <yugui@y...>
 
 	* lib/irb/xmp.rb: multilingualizes XMP::StringInputMethod.
Index: ext/socket/rubysocket.h
===================================================================
--- ext/socket/rubysocket.h	(revision 21626)
+++ ext/socket/rubysocket.h	(revision 21627)
@@ -142,6 +142,7 @@
 #endif
 #endif
 
+#include "constdefs.h"
 
 #define BLOCKING_REGION(func, arg) (long)rb_thread_blocking_region((func), (arg), RUBY_UBF_IO, 0)
 
@@ -152,19 +153,12 @@
 
 NORETURN(void raise_socket_error(const char *, int));
 
-int family_to_int(char *str, int len, int *valp);
-
 int family_arg(VALUE domain);
 int socktype_arg(VALUE type);
 int level_arg(VALUE level);
 int optname_arg(int level, VALUE optname);
 int shutdown_how_arg(VALUE how);
 
-ID intern_protocol_family(int val);
-ID intern_socktype(int val);
-ID intern_ipproto(int val);
-ID intern_family(int val);
-
 int rb_getaddrinfo(const char *node, const char *service, const struct addrinfo *hints, struct addrinfo **res);
 int rb_getnameinfo(const struct sockaddr *sa, socklen_t salen, char *host, size_t hostlen, char *serv, size_t servlen, int flags);
 struct addrinfo *sock_addrinfo(VALUE host, VALUE port, int socktype, int flags);
Index: ext/socket/constants.c
===================================================================
--- ext/socket/constants.c	(revision 21626)
+++ ext/socket/constants.c	(revision 21627)
@@ -14,7 +14,7 @@
 static void sock_define_uconst(const char *name, unsigned int value, VALUE mConst);
 #define sock_define_const(name, value) sock_define_const(name, value, mConst)
 #define sock_define_uconst(name, value) sock_define_uconst(name, value, mConst)
-#include "constants.h"
+#include "constdefs.c"
 #undef sock_define_const
 #undef sock_define_uconst
 
Index: ext/socket/depend
===================================================================
--- ext/socket/depend	(revision 21626)
+++ ext/socket/depend	(revision 21627)
@@ -1,9 +1,9 @@
 SOCK_HEADERS = rubysocket.h $(hdrdir)/ruby/ruby.h $(arch_hdrdir)/ruby/config.h \
 	$(hdrdir)/ruby/defines.h $(hdrdir)/ruby/io.h \
-	sockport.h constants.h
+	sockport.h constdefs.h
 
 init.o: init.c $(SOCK_HEADERS)
-constants.o: constants.c $(SOCK_HEADERS)
+constants.o: constants.c constdefs.c $(SOCK_HEADERS)
 basicsocket.o: basicsocket.c $(SOCK_HEADERS)
 socket.o: socket.c $(SOCK_HEADERS)
 ipsocket.o: ipsocket.c $(SOCK_HEADERS)
@@ -18,6 +18,6 @@
 getnameinfo.o: getnameinfo.c $(arch_hdrdir)/ruby/config.h addrinfo.h sockport.h
 getaddrinfo.o: getaddrinfo.c $(arch_hdrdir)/ruby/config.h addrinfo.h sockport.h
 
-constants.h: $(srcdir)/mkconstants.rb
-	@echo "generating constants.h"
-	@$(RUBY) $(srcdir)/mkconstants.rb -o $@
+constdefs.h constdefs.c : $(srcdir)/mkconstants.rb
+	@echo "generating constant definitions"
+	@$(RUBY) $(srcdir)/mkconstants.rb -H constdefs.h -o constdefs.c
Index: ext/socket/mkconstants.rb
===================================================================
--- ext/socket/mkconstants.rb	(revision 21626)
+++ ext/socket/mkconstants.rb	(revision 21627)
@@ -13,6 +13,11 @@
   opt_o = filename
 }
 
+opt_H = nil
+opt.def_option('-H FILE', 'specify output header file') {|filename|
+  opt_H = filename
+}
+
 C_ESC = {
   "\\" => "\\\\",
   '"' => '\"',
@@ -132,6 +137,16 @@
   }
 end
 
+ERB.new(<<'EOS', nil, '%').def_method(Object, "gen_name_to_int_decl(funcname, pat, prefix_optional, guard=nil)")
+%if guard
+#ifdef <%=guard%>
+int <%=funcname%>(char *str, int len, int *valp);
+#endif
+%else
+int <%=funcname%>(char *str, int len, int *valp);
+%end
+EOS
+
 ERB.new(<<'EOS', nil, '%').def_method(Object, "gen_name_to_int_func_in_guard(funcname, pat, prefix_optional, guard=nil)")
 int
 <%=funcname%>(char *str, int len, int *valp)
@@ -163,6 +178,13 @@
 %end
 EOS
 
+NAME_TO_INT_DEFS = []
+def def_name_to_int(funcname, pat, prefix_optional, guard=nil)
+  decl = gen_name_to_int_decl(funcname, pat, prefix_optional, guard)
+  func = gen_name_to_int_func(funcname, pat, prefix_optional, guard)
+  NAME_TO_INT_DEFS << [decl, func]
+end
+
 def reverse_each_name_with_prefix_optional(pat, prefix_pat)
   reverse_each_name(pat) {|n|
     yield n, n
@@ -175,7 +197,6 @@
   end
 end
 
-
 ERB.new(<<'EOS', nil, '%').def_method(Object, "gen_int_to_name_hash(hash_var, pat, prefix_pat)")
     <%=hash_var%> = st_init_numtable();
 % reverse_each_name_with_prefix_optional(pat, prefix_pat) {|n,s|
@@ -196,6 +217,10 @@
 }
 EOS
 
+ERB.new(<<'EOS', nil, '%').def_method(Object, "gen_int_to_name_decl(func_name, hash_var)")
+ID <%=func_name%>(int val);
+EOS
+
 INTERN_DEFS = []
 def def_intern(func_name, pat, prefix_optional=nil)
   prefix_pat = nil
@@ -207,12 +232,23 @@
     end
   end
   hash_var = "#{func_name}_hash"
-  decl = "static st_table *#{hash_var};"
+  vardef = "static st_table *#{hash_var};"
   gen_hash = gen_int_to_name_hash(hash_var, pat, prefix_pat)
+  decl = gen_int_to_name_decl(func_name, hash_var)
   func = gen_int_to_name_func(func_name, hash_var)
-  INTERN_DEFS << [decl, gen_hash, func]
+  INTERN_DEFS << [vardef, gen_hash, decl, func]
 end
 
+def_name_to_int("family_to_int", /\A(AF_|PF_)/, "AF_")
+def_name_to_int("socktype_to_int", /\ASOCK_/, "SOCK_")
+def_name_to_int("level_to_int", /\A(SOL_SOCKET\z|IPPROTO_)/, /\A(SOL_|IPPROTO_)/)
+def_name_to_int("so_optname_to_int", /\ASO_/, "SO_")
+def_name_to_int("ip_optname_to_int", /\AIP_/, "IP_")
+def_name_to_int("ipv6_optname_to_int", /\AIPV6_/, "IPV6_", "IPPROTO_IPV6")
+def_name_to_int("tcp_optname_to_int", /\ATCP_/, "TCP_")
+def_name_to_int("udp_optname_to_int", /\AUDP_/, "UDP_")
+def_name_to_int("shutdown_how_to_int", /\ASHUT_/, "SHUT_")
+
 def_intern('intern_family',  /\AAF_/)
 def_intern('intern_protocol_family',  /\APF_/)
 def_intern('intern_socktype',  /\ASOCK_/)
@@ -220,29 +256,33 @@
 
 result << ERB.new(<<'EOS', nil, '%').result(binding)
 
-<%= INTERN_DEFS.map {|decl, gen_hash, func| decl }.join("\n") %>
+<%= INTERN_DEFS.map {|vardef, gen_hash, decl, func| vardef }.join("\n") %>
 
 static void
 init_constants(VALUE mConst)
 {
 <%= gen_const_defs %>
-<%= INTERN_DEFS.map {|decl, gen_hash, func| gen_hash }.join("\n") %>
+<%= INTERN_DEFS.map {|vardef, gen_hash, decl, func| gen_hash }.join("\n") %>
 }
 
-<%= gen_name_to_int_func("family_to_int", /\A(AF_|PF_)/, "AF_") %>
-<%= gen_name_to_int_func("socktype_to_int", /\ASOCK_/, "SOCK_") %>
-<%= gen_name_to_int_func("level_to_int", /\A(SOL_SOCKET\z|IPPROTO_)/, /\A(SOL_|IPPROTO_)/) %>
-<%= gen_name_to_int_func("so_optname_to_int", /\ASO_/, "SO_") %>
-<%= gen_name_to_int_func("ip_optname_to_int", /\AIP_/, "IP_") %>
-<%= gen_name_to_int_func("ipv6_optname_to_int", /\AIPV6_/, "IPV6_", "IPPROTO_IPV6") %>
-<%= gen_name_to_int_func("tcp_optname_to_int", /\ATCP_/, "TCP_") %>
-<%= gen_name_to_int_func("udp_optname_to_int", /\AUDP_/, "UDP_") %>
-<%= gen_name_to_int_func("shutdown_how_to_int", /\ASHUT_/, "SHUT_") %>
+<%= NAME_TO_INT_DEFS.map {|decl, func| func }.join("\n") %>
 
-<%= INTERN_DEFS.map {|decl, gen_hash, func| func }.join("\n") %>
+<%= INTERN_DEFS.map {|vardef, gen_hash, decl, func| func }.join("\n") %>
 
 EOS
 
+header_result = ERB.new(<<'EOS', nil, '%').result(binding)
+<%= NAME_TO_INT_DEFS.map {|decl, func| decl }.join("\n") %>
+
+<%= INTERN_DEFS.map {|vardef, gen_hash, decl, func| decl }.join("\n") %>
+EOS
+
+if opt_H
+  File.open(opt_H, 'w') {|f|
+    f << header_result
+  }
+end
+
 if opt_o
   File.open(opt_o, 'w') {|f|
     f << result

Property changes on: ext/socket
___________________________________________________________________
Name: svn:ignore
   - *.def
Makefile
constants.h
extconf.h
mkmf.log
socket.a
conftest.dSYM

   + *.def
Makefile
constants.h
constdefs.h
constdefs.c
extconf.h
mkmf.log
socket.a
conftest.dSYM



--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]