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/