diff options
Diffstat (limited to 'enc')
-rw-r--r-- | enc/Makefile.in | 3 | ||||
-rw-r--r-- | enc/depend | 71 | ||||
-rw-r--r-- | enc/encinit.c.erb | 26 | ||||
-rwxr-xr-x | enc/make_encmake.rb | 62 | ||||
-rw-r--r-- | enc/trans/big5.trans | 3 | ||||
-rw-r--r-- | enc/trans/chinese.trans | 3 | ||||
-rw-r--r-- | enc/trans/emoji.trans | 3 | ||||
-rw-r--r-- | enc/trans/emoji_iso2022_kddi.trans | 3 | ||||
-rw-r--r-- | enc/trans/emoji_sjis_docomo.trans | 3 | ||||
-rw-r--r-- | enc/trans/emoji_sjis_kddi.trans | 3 | ||||
-rw-r--r-- | enc/trans/emoji_sjis_softbank.trans | 3 | ||||
-rw-r--r-- | enc/trans/escape.trans | 3 | ||||
-rw-r--r-- | enc/trans/gb18030.trans | 3 | ||||
-rw-r--r-- | enc/trans/gbk.trans | 3 | ||||
-rw-r--r-- | enc/trans/iso2022.trans | 3 | ||||
-rw-r--r-- | enc/trans/japanese.trans | 3 | ||||
-rw-r--r-- | enc/trans/japanese_euc.trans | 3 | ||||
-rw-r--r-- | enc/trans/japanese_sjis.trans | 3 | ||||
-rw-r--r-- | enc/trans/korean.trans | 3 | ||||
-rw-r--r-- | enc/trans/single_byte.trans | 3 | ||||
-rw-r--r-- | enc/trans/utf8_mac.trans | 3 | ||||
-rw-r--r-- | enc/trans/utf_16_32.trans | 3 |
22 files changed, 142 insertions, 74 deletions
diff --git a/enc/Makefile.in b/enc/Makefile.in index 203a83dbfd..44e714a440 100644 --- a/enc/Makefile.in +++ b/enc/Makefile.in @@ -20,6 +20,7 @@ ENCSODIR = $(EXTOUT)/$(arch)/enc TRANSSODIR = $(ENCSODIR)/trans DLEXT = @DLEXT@ OBJEXT = @OBJEXT@ +LIBEXT = @LIBEXT@ BUILTIN_ENCS = ascii.c us_ascii.c\ unicode.c utf_8.c @@ -32,7 +33,9 @@ LIBRUBYARG_SHARED = @LIBRUBYARG_SHARED@ LIBRUBYARG_STATIC = $(LIBRUBYARG_SHARED) empty = +AR = @AR@ CC = @CC@ +RANLIB = @RANLIB@ OUTFLAG = @OUTFLAG@$(empty) COUTFLAG = @COUTFLAG@$(empty) CFLAGS = $(CCDLFLAGS) @CFLAGS@ @ARCH_FLAG@ diff --git a/enc/depend b/enc/depend index ca6085dad9..d600616734 100644 --- a/enc/depend +++ b/enc/depend @@ -5,34 +5,7 @@ % dldflags = $2 % enable_shared = CONFIG['ENABLE_SHARED'] == 'yes' % deffile = (true if /\$\(DEFFILE\)/ =~ CONFIG["LINK_SO"]) -% encs = Dir.open($srcdir) {|d| d.grep(/.+\.c\z/)} - BUILTIN_ENCS - ["mktable.c"] -% encs.each {|e| e.chomp!(".c")} -% encs.reject! {|e| !ENC_PATTERNS.any? {|p| File.fnmatch?(p, e)}} if !ENC_PATTERNS.empty? -% encs.reject! {|e| NOENC_PATTERNS.any? {|p| File.fnmatch?(p, e)}} -% alphanumeric_order = proc {|e| e.scan(/(\d+)|(\D+)/).map {|n,a| a||[n.size,n.to_i]}.flatten} -% encs = encs.sort_by(&alphanumeric_order) -% encs.unshift(encs.delete("encdb")) -% atrans = [] -% trans = Dir.open($srcdir+"/trans") {|d| -% d.select {|e| -% if e.chomp!('.trans') -% atrans << e -% true -% elsif e.chomp!('.c') -% true -% end -% } -% } -% trans -= BUILTIN_TRANSES -% atrans -= BUILTIN_TRANSES -% trans.uniq! -% atrans = atrans.sort_by(&alphanumeric_order) -% trans = trans.sort_by(&alphanumeric_order) -% trans.unshift(trans.delete("transdb")) -% trans.compact! -% trans |= atrans -% trans.map! {|e| "trans/#{e}"} -% dependencies = encs + trans +% dependencies = ENCS + TRANS % cleanlibs = Shellwords.shellwords(CONFIG["cleanlibs"] || "") % cleanobjs = Shellwords.shellwords(CONFIG["cleanobjs"] || "") % cleanobjs << "$*.def" if deffile @@ -54,31 +27,51 @@ else '' end %> <%=CONFIG['LIBS']%> $(EXTLIBS) -ENCOBJS = <%=encs.map {|e|"enc/#{e}.$(OBJEXT)"}.join(" \\\n\t ")%><%="\n" if encs.size>1%> -ENCSOS = <%=encs.map {|e|"$(ENCSODIR)/#{e}.$(DLEXT)"}.join(" \\\n\t ")%><%="\n" if encs.size>1%> +ENCOBJS = <%=ENCS.map {|e|"enc/#{e}.$(OBJEXT)"}.join(" \\\n\t ")%><%="\n" if ENCS.size>1%> +ENCSOS = <%=ENCS.map {|e|"$(ENCSODIR)/#{e}.$(DLEXT)"}.join(" \\\n\t ")%><%="\n" if ENCS.size>1%> ENCCLEANLIBS = <%=cleanlibs.map {|clean| clean.gsub(/\$\*(\.\w+)?/) {"$(ENCOBJS#{$1 ? ":.#{CONFIG["OBJEXT"]}=#{$1}" : ""})"} }.join(" ")%> ENCCLEANOBJS = <%=cleanobjs.map {|clean| clean.gsub(/\$\*(\.\w+)?/) {"$(ENCOBJS#{$1 ? ":.#{CONFIG["OBJEXT"]}=#{$1}" : ""})"} }.join(" ")%> +LIBENC=enc/libenc.$(LIBEXT) TRANSVPATH = $(srcdir)/enc/trans -TRANSCSRCS = <%=atrans.map {|e| transvpath % "#{e}.c"}.join(" \\\n\t ")%><%="\n" if trans.size>1%> -TRANSOBJS = <%=trans.map {|e|"enc/#{e}.$(OBJEXT)"}.join(" \\\n\t ")%><%="\n" if trans.size>1%> -TRANSSOS = <%=trans.map {|e|"$(ENCSODIR)/#{e}.$(DLEXT)"}.join(" \\\n\t ")%><%="\n" if trans.size>1%> +TRANSCSRCS = <%=ATRANS.map {|e| transvpath % "#{e}.c"}.join(" \\\n\t ")%><%="\n" if TRANS.size>1%> +TRANSOBJS = <%=TRANS.map {|e|"enc/#{e}.$(OBJEXT)"}.join(" \\\n\t ")%><%="\n" if TRANS.size>1%> +TRANSSOS = <%=TRANS.map {|e|"$(ENCSODIR)/#{e}.$(DLEXT)"}.join(" \\\n\t ")%><%="\n" if TRANS.size>1%> TRANSCLEANLIBS = <%=cleanlibs.map {|clean| clean.gsub(/\$\*(\.\w+)?/) {"$(TRANSOBJS#{$1 ? ":.#{CONFIG["OBJEXT"]}=#{$1}" : ""})"} }.join(" ")%> TRANSCLEANOBJS = <%=cleanobjs.map {|clean| clean.gsub(/\$\*(\.\w+)?/) {"$(TRANSOBJS#{$1 ? ":.#{CONFIG["OBJEXT"]}=#{$1}" : ""})"} }.join(" ")%> +LIBTRANS=enc/libtrans.$(LIBEXT) encs: all +% if MODULE_TYPE == :static +all: libenc libtrans +% else all: enc trans +%end +libencs: libenc libtrans enc: $(ENCSOS) +libenc: $(LIBENC) trans: $(TRANSSOS) +libtrans: $(LIBTRANS) + +$(LIBENC): $(ENCOBJS) + @$(RM) $@ + $(ECHO) linking statically-linked encoding library $@ + $(Q) $(AR) <%=CONFIG['ARFLAGS'] || 'rcu' %> $@ $(ENCOBJS) + @-$(RANLIB) $@ 2> /dev/null || true +$(LIBTRANS): $(TRANSOBJS) + @$(RM) $@ + $(ECHO) linking statically-linked transcoder library $@ + $(Q) $(AR) <%=CONFIG['ARFLAGS'] || 'rcu' %> $@ $(TRANSOBJS) + @-$(RANLIB) $@ 2> /dev/null || true srcs: $(TRANSCSRCS) @@ -86,15 +79,15 @@ srcs: $(TRANSCSRCS) $(ECHO) generating table from $@ $(Q)$(MINIRUBY) "$(srcdir)/tool/transcode-tblgen.rb" -vo "$@" "$<" -% unless encs.empty? or trans.empty? +% unless ENCS.empty? or TRANS.empty? -% unless encs.empty? +% unless ENCS.empty? $(ENCOBJS): regenc.h oniguruma.h config.h defines.h % end -% unless trans.empty? +% unless TRANS.empty? $(TRANSOBJS): ruby.h intern.h config.h defines.h missing.h encoding.h oniguruma.h st.h transcode_data.h % end -% atrans.each do |e| +% ATRANS.each do |e| % src = "#{e}.trans" <%=transvpath % "#{e}.c"%>: <%= transvpath % "#{e}.trans"%> @@ -142,7 +135,7 @@ enc/encdb.$(OBJEXT): encdb.h enc/trans/transdb.$(OBJEXT): transdb.h clean: -% %w[$(ENCSOS) $(ENCOBJS) $(ENCCLEANOBJS) $(ENCCLEANLIBS) $(TRANSSOS) $(TRANSOBJS) $(TRANSCLEANOBJS) $(TRANSCLEANLIBS)].each do |clean| +% %w[$(ENCSOS) $(LIBENC) $(ENCOBJS) $(ENCCLEANOBJS) $(ENCCLEANLIBS) $(TRANSSOS) $(LIBTRANS) $(TRANSOBJS) $(TRANSCLEANOBJS) $(TRANSCLEANLIBS)].each do |clean| $(Q)$(RM) <%=pathrep[clean]%> % end % @ignore_error = $nmake ? '' : ' 2> /dev/null || true' @@ -160,3 +153,5 @@ clean-srcs: $(Q)$(RM) enc/unicode/name2ctype.h -$(Q)$(RMDIR) <%=pathrep['enc/unicode']%><%=@ignore_error%> -$(Q)$(RMDIR) <%=pathrep['enc']%><%=@ignore_error%> + +<%# vim: set ft=eruby noexpandtab ts=8 sw=2 : -%> diff --git a/enc/encinit.c.erb b/enc/encinit.c.erb new file mode 100644 index 0000000000..17b94027d0 --- /dev/null +++ b/enc/encinit.c.erb @@ -0,0 +1,26 @@ +<%# -*- encoding: UTF-8 -*-%> +/* Copyright 2012 Google Inc. Some Rights Reserved. + * Author: yugui@google.com (Yugui Sonoda) + */ +#include <stdio.h> + +#define init(func, name) { \ + extern void func(void); \ + ruby_init_ext(name, func); \ +} + +void ruby_init_ext(const char *name, void (*init)(void)); + +void Init_enc() +{ + <% ENCS.each do |enc| -%> + init(Init_<%= enc %>, "enc/<%= enc %>.so"); + <% end -%> + + init(Init_transdb, "enc/trans/transdb.so"); + <% TRANS.each do |trans| -%> + <% next if trans == 'trans/transdb' -%> + init(Init_trans_<%= File.basename trans %>, "enc/<%= trans %>.so"); + <% end -%> +} +<%# vim: set fenc=utf-8 ft=eruby sw=2 : -%> diff --git a/enc/make_encmake.rb b/enc/make_encmake.rb index ed3680313f..291774e60c 100755 --- a/enc/make_encmake.rb +++ b/enc/make_encmake.rb @@ -15,6 +15,7 @@ BUILTIN_ENCS = [] BUILTIN_TRANSES = [] ENC_PATTERNS = [] NOENC_PATTERNS = [] +module_type = :dynamic until ARGV.empty? case ARGV[0] @@ -30,11 +31,57 @@ until ARGV.empty? when /\A--no-encs=/ NOENC_PATTERNS.concat $'.split ARGV.shift + when /\A--module$/ + ARGV.shift + when /\A--modulestatic$/ + module_type = :static + ARGV.shift else break end end +ALPHANUMERIC_ORDER = proc {|e| e.scan(/(\d+)|(\D+)/).map {|n,a| a||[n.size,n.to_i]}.flatten} +def target_encodings + encs = Dir.open($srcdir) {|d| d.grep(/.+\.c\z/)} - BUILTIN_ENCS - ["mktable.c"] + encs.each {|e| e.chomp!(".c")} + encs.reject! {|e| !ENC_PATTERNS.any? {|p| File.fnmatch?(p, e)}} if !ENC_PATTERNS.empty? + encs.reject! {|e| NOENC_PATTERNS.any? {|p| File.fnmatch?(p, e)}} + encs = encs.sort_by(&ALPHANUMERIC_ORDER) + encs.unshift(encs.delete("encdb")) + return encs +end + +def target_transcoders + atrans = [] + trans = Dir.open($srcdir+"/trans") {|d| + d.select {|e| + if e.chomp!('.trans') + atrans << e + true + elsif e.chomp!('.c') + true + end + } + } + trans -= BUILTIN_TRANSES + atrans -= BUILTIN_TRANSES + trans.uniq! + atrans = atrans.sort_by(&ALPHANUMERIC_ORDER) + trans = trans.sort_by(&ALPHANUMERIC_ORDER) + trans.unshift(trans.delete("transdb")) + trans.compact! + trans |= atrans + trans.map! {|e| "trans/#{e}"} + + return atrans, trans +end + +# Constants that "depend" needs. +MODULE_TYPE = module_type +ENCS = target_encodings +ATRANS, TRANS = target_transcoders + if File.exist?(depend = File.join($srcdir, "depend")) erb = ERB.new(File.read(depend), nil, '%') erb.filename = depend @@ -48,3 +95,18 @@ mkin.gsub!(/@(#{CONFIG.keys.join('|')})@/) {CONFIG[$1]} open(ARGV[0], 'wb') {|f| f.puts mkin, dep } +if MODULE_TYPE == :static + erb = ERB.new(File.read(File.join($srcdir, "encinit.c.erb")), nil, '%-') + erb.filename = "enc/encinit.c.cerb" + tmp = erb.result(binding) + begin + Dir.mkdir 'enc' + rescue Errno::EEXIST + end + File.open("enc/encinit.c", "w") {|f| + f.puts "/* Automatically generated from enc/encinit.c.erb" + f.puts " * Do not edit." + f.puts " */" + f.puts tmp + } +end diff --git a/enc/trans/big5.trans b/enc/trans/big5.trans index 9dacfd1f7e..c85ada3731 100644 --- a/enc/trans/big5.trans +++ b/enc/trans/big5.trans @@ -26,8 +26,7 @@ <%= transcode_generated_code %> -void -Init_big5(void) +TRANS_INIT(big5) { <%= transcode_register_code %> } diff --git a/enc/trans/chinese.trans b/enc/trans/chinese.trans index 0662a3bebc..282c91aba7 100644 --- a/enc/trans/chinese.trans +++ b/enc/trans/chinese.trans @@ -25,8 +25,7 @@ <%= transcode_generated_code %> -void -Init_chinese(void) +TRANS_INIT(chinese) { <%= transcode_register_code %> } diff --git a/enc/trans/emoji.trans b/enc/trans/emoji.trans index 1cf13743a2..25d9fdd4d8 100644 --- a/enc/trans/emoji.trans +++ b/enc/trans/emoji.trans @@ -30,8 +30,7 @@ <%= transcode_generated_code %> -void -Init_emoji(void) +TRANS_INIT(emoji) { <%= transcode_register_code %> } diff --git a/enc/trans/emoji_iso2022_kddi.trans b/enc/trans/emoji_iso2022_kddi.trans index ccf3139d3c..ea180c1e42 100644 --- a/enc/trans/emoji_iso2022_kddi.trans +++ b/enc/trans/emoji_iso2022_kddi.trans @@ -208,8 +208,7 @@ rb_iso2022jp_kddi_encoder = { iso2022jp_kddi_encoder_reset_sequence_size, finish_iso2022jp_kddi_encoder }; -void -Init_emoji_iso2022_kddi(void) +TRANS_INIT(emoji_iso2022_kddi) { rb_register_transcoder(&rb_iso2022jp_kddi_decoder); rb_register_transcoder(&rb_iso2022jp_kddi_encoder); diff --git a/enc/trans/emoji_sjis_docomo.trans b/enc/trans/emoji_sjis_docomo.trans index 36e6e20339..5dd9c7a1e3 100644 --- a/enc/trans/emoji_sjis_docomo.trans +++ b/enc/trans/emoji_sjis_docomo.trans @@ -26,8 +26,7 @@ <%= transcode_generated_code %> -void -Init_emoji_sjis_docomo(void) +TRANS_INIT(emoji_sjis_docomo) { <%= transcode_register_code %> } diff --git a/enc/trans/emoji_sjis_kddi.trans b/enc/trans/emoji_sjis_kddi.trans index 654bed134e..6df62f14d1 100644 --- a/enc/trans/emoji_sjis_kddi.trans +++ b/enc/trans/emoji_sjis_kddi.trans @@ -27,8 +27,7 @@ <%= transcode_generated_code %> -void -Init_emoji_sjis_kddi(void) +TRANS_INIT(emoji_sjis_kddi) { <%= transcode_register_code %> } diff --git a/enc/trans/emoji_sjis_softbank.trans b/enc/trans/emoji_sjis_softbank.trans index c152d99c76..c520035347 100644 --- a/enc/trans/emoji_sjis_softbank.trans +++ b/enc/trans/emoji_sjis_softbank.trans @@ -26,8 +26,7 @@ <%= transcode_generated_code %> -void -Init_emoji_sjis_softbank(void) +TRANS_INIT(emoji_sjis_softbank) { <%= transcode_register_code %> } diff --git a/enc/trans/escape.trans b/enc/trans/escape.trans index a2fbebac33..550e4ac767 100644 --- a/enc/trans/escape.trans +++ b/enc/trans/escape.trans @@ -85,8 +85,7 @@ rb_escape_xml_attr_quote = { escape_xml_attr_quote_finish }; -void -Init_escape(void) +TRANS_INIT(escape) { <%= transcode_register_code %> rb_register_transcoder(&rb_escape_xml_attr_quote); diff --git a/enc/trans/gb18030.trans b/enc/trans/gb18030.trans index c7da4c64b4..94c866eb39 100644 --- a/enc/trans/gb18030.trans +++ b/enc/trans/gb18030.trans @@ -176,8 +176,7 @@ rb_to_GB18030 = { }; -void -Init_gb18030(void) +TRANS_INIT(gb18030) { rb_register_transcoder(&rb_from_GB18030); rb_register_transcoder(&rb_to_GB18030); diff --git a/enc/trans/gbk.trans b/enc/trans/gbk.trans index 0df148198e..3c2cf0c1af 100644 --- a/enc/trans/gbk.trans +++ b/enc/trans/gbk.trans @@ -9,8 +9,7 @@ <%= transcode_generated_code %> -void -Init_gbk(void) +TRANS_INIT(gbk) { <%= transcode_register_code %> } diff --git a/enc/trans/iso2022.trans b/enc/trans/iso2022.trans index 3f40cce3c8..a441f1596d 100644 --- a/enc/trans/iso2022.trans +++ b/enc/trans/iso2022.trans @@ -553,8 +553,7 @@ rb_cp50220_encoder = { iso2022jp_encoder_reset_sequence_size, finish_cp50220_encoder }; -void -Init_iso2022(void) +TRANS_INIT(iso2022) { rb_register_transcoder(&rb_iso2022jp_decoder); rb_register_transcoder(&rb_iso2022jp_encoder); diff --git a/enc/trans/japanese.trans b/enc/trans/japanese.trans index ce5d0bb70f..7ff024fa8d 100644 --- a/enc/trans/japanese.trans +++ b/enc/trans/japanese.trans @@ -90,8 +90,7 @@ rb_sjis2eucjp = { NULL, NULL, NULL, fun_so_sjis2eucjp }; -void -Init_japanese(void) +TRANS_INIT(japanese) { rb_register_transcoder(&rb_eucjp2sjis); rb_register_transcoder(&rb_sjis2eucjp); diff --git a/enc/trans/japanese_euc.trans b/enc/trans/japanese_euc.trans index ff976e4dd0..0f63272321 100644 --- a/enc/trans/japanese_euc.trans +++ b/enc/trans/japanese_euc.trans @@ -51,8 +51,7 @@ <%= transcode_generated_code %> -void -Init_japanese_euc(void) +TRANS_INIT(japanese_euc) { <%= transcode_register_code %> } diff --git a/enc/trans/japanese_sjis.trans b/enc/trans/japanese_sjis.trans index 00eace27a3..8e1e13056d 100644 --- a/enc/trans/japanese_sjis.trans +++ b/enc/trans/japanese_sjis.trans @@ -27,8 +27,7 @@ <%= transcode_generated_code %> -void -Init_japanese_sjis(void) +TRANS_INIT(japanese_sjis) { <%= transcode_register_code %> } diff --git a/enc/trans/korean.trans b/enc/trans/korean.trans index ef1cdfcb8e..fda1a3eeda 100644 --- a/enc/trans/korean.trans +++ b/enc/trans/korean.trans @@ -12,8 +12,7 @@ <%= transcode_generated_code %> -void -Init_korean(void) +TRANS_INIT(korean) { <%= transcode_register_code %> } diff --git a/enc/trans/single_byte.trans b/enc/trans/single_byte.trans index 2293bf6faf..50f568cb94 100644 --- a/enc/trans/single_byte.trans +++ b/enc/trans/single_byte.trans @@ -84,8 +84,7 @@ <%= transcode_generated_code %> -void -Init_single_byte(void) +TRANS_INIT(single_byte) { <%= transcode_register_code %> } diff --git a/enc/trans/utf8_mac.trans b/enc/trans/utf8_mac.trans index 8ea0afd73f..11ce35e212 100644 --- a/enc/trans/utf8_mac.trans +++ b/enc/trans/utf8_mac.trans @@ -233,8 +233,7 @@ rb_from_UTF8_MAC = { from_utf8_mac_finish }; -void -Init_utf8_mac(void) +TRANS_INIT(utf8_mac) { <%= transcode_register_code %> rb_register_transcoder(&rb_from_UTF8_MAC); diff --git a/enc/trans/utf_16_32.trans b/enc/trans/utf_16_32.trans index c841df035f..632c8808ef 100644 --- a/enc/trans/utf_16_32.trans +++ b/enc/trans/utf_16_32.trans @@ -539,8 +539,7 @@ rb_to_UTF_32 = { NULL, NULL, NULL, fun_so_to_utf_32 }; -void -Init_utf_16_32(void) +TRANS_INIT(utf_16_32) { rb_register_transcoder(&rb_from_UTF_16BE); rb_register_transcoder(&rb_to_UTF_16BE); |