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

ruby-changes:23611

From: yugui <ko1@a...>
Date: Wed, 16 May 2012 14:39:26 +0900 (JST)
Subject: [ruby-changes:23611] yugui:r35662 (trunk): Supports static linking of extensions and encodings again.

yugui	2012-05-16 14:39:06 +0900 (Wed, 16 May 2012)

  New Revision: 35662

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

  Log:
    Supports static linking of extensions and encodings again.
    Fixes --with-static-linked-ext.
    
    Patch by Google Inc. [ruby-core:45073].
    
    * Makefile.in (ENCOBJS, EXTOBJS): New variables to specify static
      linked libraries. Also reintroduces extinit.o, introduces encinit.o
      introduces encinit.o
    
    * common.mk: Builds static libraries rather than shared objects if
      specified.
    
    * configure.in (LD): new substitution. 
      Avoids PIE if s
    
    * enc/depend: Supports static linked libraries
      (libencs, libenc, libtrans): New target.
    
    * enc/encinit.c.erb: new template to generate the initialization of
      statically linked encodings.
    
    * enc/make_encmake.rb (--module): new flag to specify whether static
      or dynamic.
    
    * transcode_data.h (TRANS_INIT): New macro to get rid of the name
      collision of encoding initializers and transcoder initializers.
    
    * ext/extmk.rb: Fixes the behavior on $extstatic is true.
    
    * lib/mkmf.rb (clean-static): new target to clean up static linked
      libraries.
    
    * ruby.c (process_options): New initializes statically linked
      encodings here.

  Added files:
    trunk/enc/encinit.c.erb
  Modified files:
    trunk/ChangeLog
    trunk/Makefile.in
    trunk/common.mk
    trunk/configure.in
    trunk/dmyext.c
    trunk/enc/Makefile.in
    trunk/enc/depend
    trunk/enc/make_encmake.rb
    trunk/enc/trans/big5.trans
    trunk/enc/trans/chinese.trans
    trunk/enc/trans/emoji.trans
    trunk/enc/trans/emoji_iso2022_kddi.trans
    trunk/enc/trans/emoji_sjis_docomo.trans
    trunk/enc/trans/emoji_sjis_kddi.trans
    trunk/enc/trans/emoji_sjis_softbank.trans
    trunk/enc/trans/escape.trans
    trunk/enc/trans/gb18030.trans
    trunk/enc/trans/gbk.trans
    trunk/enc/trans/iso2022.trans
    trunk/enc/trans/japanese.trans
    trunk/enc/trans/japanese_euc.trans
    trunk/enc/trans/japanese_sjis.trans
    trunk/enc/trans/korean.trans
    trunk/enc/trans/single_byte.trans
    trunk/enc/trans/utf8_mac.trans
    trunk/enc/trans/utf_16_32.trans
    trunk/ext/extmk.rb
    trunk/lib/mkmf.rb
    trunk/ruby.c
    trunk/transcode_data.h

Index: configure.in
===================================================================
--- configure.in	(revision 35661)
+++ configure.in	(revision 35662)
@@ -291,6 +291,8 @@
 AC_PROG_CXX
 AC_PROG_GCC_TRADITIONAL
 AC_SUBST(GCC)
+AC_CHECK_TOOL([LD], [ld], [ld])
+AC_SUBST(LD)
 if test "$GCC" = yes; then
     linker_flag=-Wl,
     : ${optflags=-O3}
@@ -2095,7 +2097,7 @@
 
   AS_CASE(["$target_os"],
 	[hpux*], [	DLDFLAGS="$DLDFLAGS -E"
-			: ${LDSHARED='ld -b'}
+			: ${LDSHARED="$(LD) -b"}
 			XLDFLAGS="$XLDFLAGS -Wl,-E"
 			: ${LIBPATHENV=SHLIB_PATH}
 			if test "$rb_cv_prog_gnu_ld" = no; then
@@ -2114,17 +2116,17 @@
 			    : ${LIBPATHENV=LD_LIBRARY_PATH_64}
 			fi
 			rb_cv_dlopen=yes],
-	[sunos*], [	: ${LDSHARED='ld -assert nodefinitions'}
+	[sunos*], [	: ${LDSHARED="$(LD) -assert nodefinitions"}
 			rb_cv_dlopen=yes],
-	[irix*], [	: ${LDSHARED='ld -shared'}
+	[irix*], [	: ${LDSHARED="$(LD) -shared"}
 			rb_cv_dlopen=yes],
-	[sysv4*], [	: ${LDSHARED='ld -G'}
+	[sysv4*], [	: ${LDSHARED="$(LD) -G"}
 			rb_cv_dlopen=yes],
 	[nto-qnx*], [	: ${LDSHARED='$(CC) -shared'}
 			rb_cv_dlopen=yes],
-	[esix*|uxpds*], [ : ${LDSHARED="ld -G"}
+	[esix*|uxpds*], [ : ${LDSHARED="$(LD) -G"}
 			rb_cv_dlopen=yes],
-	[osf*], [	: ${LDSHARED="ld -shared -expect_unresolved \"*\""}
+	[osf*], [	: ${LDSHARED="$(LD) -shared -expect_unresolved \"*\""}
 			rb_cv_dlopen=yes],
 	[bsdi3*], [	AS_CASE(["$CC"],
 			[*shlicc*], [	: ${LDSHARED='$(CC) -r'}
@@ -2145,7 +2147,7 @@
 			    LDFLAGS="$LDFLAGS -rdynamic"
 			    DLDFLAGS="$DLDFLAGS "'-Wl,-soname,$(.TARGET)'
 			else
-			  test "$GCC" = yes && test "$rb_cv_prog_gnu_ld" = yes || LDSHARED="ld -Bshareable"
+			  test "$GCC" = yes && test "$rb_cv_prog_gnu_ld" = yes || LDSHARED="$(LD) -Bshareable"
 			fi
 			rb_cv_dlopen=yes],
 	[openbsd*], [	: ${LDSHARED='$(CC) -shared ${CCDLFLAGS}'}
@@ -2179,12 +2181,12 @@
 			rb_cv_dlopen=yes],
 	[beos*], [	AS_CASE(["$target_cpu"],
 			  [powerpc*], [
-			    : ${LDSHARED="ld -xms"}
+			    : ${LDSHARED="$(LD) -xms"}
 			    DLDFLAGS="$DLDFLAGS "'-export Init_$(TARGET) -lbe -lroot glue-noinit.a init_term_dyn.o start_dyn.o'
 			    LDFLAGS="$LDFLAGS -L/boot/home/config/lib -lbe -lroot"
 			    ],
 			  [i586*], [
-			    : ${LDSHARED="ld -shared"}
+			    : ${LDSHARED="$(LD) -shared"}
 			    DLDFLAGS="$DLDFLAGS -L/boot/develop/lib/x86 -L/boot/home/config/lib \$(topdir)/_APP_ -lbe -lroot"
 			    LDFLAGS="$LDFLAGS -L/boot/develop/lib/x86 -L/boot/home/config/lib -lbe -lroot"
 			    ])
@@ -2192,17 +2194,17 @@
 			rb_cv_dlopen=yes],
 	[haiku*], [	AS_CASE(["$target_cpu"],
 			  [powerpc*], [
-			    : ${LDSHARED="ld -xms"}
+			    : ${LDSHARED="$(LD) -xms"}
 			    DLDFLAGS="$DLDFLAGS "'-export Init_$(TARGET) -lbe -lroot glue-noinit.a init_term_dyn.o start_dyn.o'
                             ],
 			  [i586*], [
-			    : ${LDSHARED="ld -shared"}
+			    : ${LDSHARED="$(LD) -shared"}
 			    DLDFLAGS="$DLDFLAGS -L/boot/develop/lib/x86 -lbe -lroot"
 			    ])
 			: ${LIBPATHENV=LIBRARY_PATH}
 			rb_cv_dlopen=yes ],
 	[nto-qnx*], [	DLDFLAGS="$DLDFLAGS -L/lib -L/usr/lib -L/usr/local/lib"
-			: ${LDSHARED='ld -Bshareable -x'}
+			: ${LDSHARED="$(LD) -Bshareable -x"}
 			LDFLAGS="$LDFLAGS -L/lib -L/usr/lib -L/usr/local/lib"
 			rb_cv_dlopen=yes],
 	[cygwin*|mingw*], [
@@ -2211,12 +2213,12 @@
 			DLDFLAGS="${DLDFLAGS} -Wl,--enable-auto-image-base,--enable-auto-import"
 			: ${LIBPATHENV=""}
 			rb_cv_dlopen=yes],
-	[hiuxmpp], [	: ${LDSHARED='ld -r'}],
+	[hiuxmpp], [	: ${LDSHARED="$(LD) -r"}],
 	[atheos*], [	: ${LDSHARED='$(CC) -shared'}
 			rb_cv_dlopen=yes],
 	[os2-emx*], [	LDFLAGS="$LDFLAGS -Zomf"
 			],
-	[ 	: ${LDSHARED='ld'}])
+	[ 	: ${LDSHARED="$(LD)"}])
   AC_MSG_RESULT($rb_cv_dlopen)
 fi
 if test "${LDSHAREDXX}" = ""; then
@@ -2324,6 +2326,13 @@
 AC_ARG_WITH(static-linked-ext,
 	    AS_HELP_STRING([--with-static-linked-ext], [link external modules statically]),
             [AS_CASE([$withval],[yes],[STATIC=;EXTSTATIC=static])])
+if test x"$EXTSTATIC" = xstatic; then
+  ENCOBJS='enc/encinit.$(OBJEXT) enc/libenc.a enc/libtrans.a'
+  EXTOBJS='ext/extinit.$(OBJEXT) ext/libext.a'
+  AC_DEFINE_UNQUOTED(EXTSTATIC, 1)
+fi
+AC_SUBST(ENCOBJS)
+AC_SUBST(EXTOBJS)
 
 AS_CASE(["$target_os"],
   dnl OS/2 environment w/ Autoconf 2.1x for EMX
@@ -2507,7 +2516,7 @@
   LIBRUBYARG_SHARED=
 
   # enable PIE if possible
-  if test "$GCC" = yes; then
+  if test "$GCC" = yes and -z "$EXTSTATIC"; then
     RUBY_TRY_CFLAGS(-fPIE, [pie=yes], [pie=no])
     if test "$pie" = yes; then
       RUBY_APPEND_OPTION(XCFLAGS, -fPIE)
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 35661)
+++ ChangeLog	(revision 35662)
@@ -1,3 +1,39 @@
+Wed May 16 14:19:51 2012  Yuki Yugui Sonoda  <yugui@g...>
+
+	Supports static linking of extensions and encodings again.
+	Fixes --with-static-linked-ext.
+
+	Patch by Google Inc. [ruby-core:45073].
+
+	* Makefile.in (ENCOBJS, EXTOBJS): New variables to specify static
+	  linked libraries. Also reintroduces extinit.o, introduces encinit.o
+	  introduces encinit.o
+
+	* common.mk: Builds static libraries rather than shared objects if
+	  specified.
+	
+	* configure.in (LD): new substitution.
+
+	* enc/depend: Supports static linked libraries
+	  (libencs, libenc, libtrans): New target.
+
+	* enc/encinit.c.erb: new template to generate the initialization of
+	  statically linked encodings.
+	
+	* enc/make_encmake.rb (--module): new flag to specify whether static
+	  or dynamic.
+	
+	* transcode_data.h (TRANS_INIT): New macro to get rid of the name
+	  collision of encoding initializers and transcoder initializers.
+
+	* ext/extmk.rb: Fixes the behavior on $extstatic is true.
+
+	* lib/mkmf.rb (clean-static): new target to clean up static linked
+	  libraries.
+
+	* ruby.c (process_options): New initializes statically linked
+	  encodings here.
+
 Wed May 16 14:30:43 2012  NAKAMURA Usaku  <usa@r...>
 
 	* io.c: fixed a merge mistake of r33878, reported by nobu via IRC.
Index: enc/Makefile.in
===================================================================
--- enc/Makefile.in	(revision 35661)
+++ enc/Makefile.in	(revision 35662)
@@ -20,6 +20,7 @@
 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_STATIC = $(LIBRUBYARG_SHARED)
 
 empty =
+AR = @AR@
 CC = @CC@
+RANLIB = @RANLIB@
 OUTFLAG = @OUTFLAG@$(empty)
 COUTFLAG = @COUTFLAG@$(empty)
 CFLAGS = $(CCDLFLAGS) @CFLAGS@ @ARCH_FLAG@
Index: enc/make_encmake.rb
===================================================================
--- enc/make_encmake.rb	(revision 35661)
+++ enc/make_encmake.rb	(revision 35662)
@@ -15,6 +15,7 @@
 BUILTIN_TRANSES = []
 ENC_PATTERNS = []
 NOENC_PATTERNS = []
+module_type = :dynamic
 
 until ARGV.empty?
   case ARGV[0]
@@ -30,11 +31,57 @@
   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 @@
 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
Index: enc/encinit.c.erb
===================================================================
--- enc/encinit.c.erb	(revision 0)
+++ enc/encinit.c.erb	(revision 35662)
@@ -0,0 +1,26 @@
+<%# -*- encoding: UTF-8 -*-%>
+/* Copyright 2012 Google Inc. Some Rights Reserved.
+ * Author: yugui@g... (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 : -%>
Index: enc/trans/escape.trans
===================================================================
--- enc/trans/escape.trans	(revision 35661)
+++ enc/trans/escape.trans	(revision 35662)
@@ -85,8 +85,7 @@
     escape_xml_attr_quote_finish
 };
 
-void
-Init_escape(void)
+TRANS_INIT(escape)
 {
 <%= transcode_register_code %>
     rb_register_transcoder(&rb_escape_xml_attr_quote);
Index: enc/trans/gbk.trans
===================================================================
--- enc/trans/gbk.trans	(revision 35661)
+++ enc/trans/gbk.trans	(revision 35662)
@@ -9,8 +9,7 @@
 
 <%= transcode_generated_code %>
 
-void
-Init_gbk(void)
+TRANS_INIT(gbk)
 {
 <%= transcode_register_code %>
 }
Index: enc/trans/chinese.trans
===================================================================
--- enc/trans/chinese.trans	(revision 35661)
+++ enc/trans/chinese.trans	(revision 35662)
@@ -25,8 +25,7 @@
 
 <%= transcode_generated_code %>
 
-void
-Init_chinese(void)
+TRANS_INIT(chinese)
 {
 <%= transcode_register_code %>
 }
Index: enc/trans/utf_16_32.trans
===================================================================
--- enc/trans/utf_16_32.trans	(revision 35661)
+++ enc/trans/utf_16_32.trans	(revision 35662)
@@ -539,8 +539,7 @@
     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);
Index: enc/trans/gb18030.trans
===================================================================
--- enc/trans/gb18030.trans	(revision 35661)
+++ enc/trans/gb18030.trans	(revision 35662)
@@ -176,8 +176,7 @@
 };
 
 
-void
-Init_gb18030(void)
+TRANS_INIT(gb18030)
 {
     rb_register_transcoder(&rb_from_GB18030);
     rb_register_transcoder(&rb_to_GB18030);
Index: enc/trans/japanese.trans
===================================================================
--- enc/trans/japanese.trans	(revision 35661)
+++ enc/trans/japanese.trans	(revision 35662)
@@ -90,8 +90,7 @@
     NULL, NULL, NULL, fun_so_sjis2eucjp
 };
 
-void
-Init_japanese(void)
+TRANS_INIT(japanese)
 {
     rb_register_transcoder(&rb_eucjp2sjis);
     rb_register_transcoder(&rb_sjis2eucjp);
Index: enc/trans/emoji_sjis_docomo.trans
===================================================================
--- enc/trans/emoji_sjis_docomo.trans	(revision 35661)
+++ enc/trans/emoji_sjis_docomo.trans	(revision 35662)
@@ -26,8 +26,7 @@
 
 <%= transcode_generated_code %>
 
-void
-Init_emoji_sjis_docomo(void)
+TRANS_INIT(emoji_sjis_docomo)
 {
 <%= transcode_register_code %>
 }
Index: enc/trans/iso2022.trans
===================================================================
--- enc/trans/iso2022.trans	(revision 35661)
+++ enc/trans/iso2022.trans	(revision 35662)
@@ -553,8 +553,7 @@
     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);
Index: enc/trans/emoji.trans
===================================================================
--- enc/trans/emoji.trans	(revision 35661)
+++ enc/trans/emoji.trans	(revision 35662)
@@ -30,8 +30,7 @@
 
 <%= transcode_generated_code %>
 
-void
-Init_emoji(void)
+TRANS_INIT(emoji)
 {
 <%= transcode_register_code %>
 }
Index: enc/trans/single_byte.trans
===================================================================
--- enc/trans/single_byte.trans	(revision 35661)
+++ enc/trans/single_byte.trans	(revision 35662)
@@ -84,8 +84,7 @@
 
 <%= transcode_generated_code %>
 
-void
-Init_single_byte(void)
+TRANS_INIT(single_byte)
 {
 <%= transcode_register_code %>
 }
Index: enc/trans/utf8_mac.trans
===================================================================
--- enc/trans/utf8_mac.trans	(revision 35661)
+++ enc/trans/utf8_mac.trans	(revision 35662)
@@ -233,8 +233,7 @@
     from_utf8_mac_finish
 };
 
-void
-Init_utf8_mac(void)
+TRANS_INIT(utf8_mac)
 {
 <%= transcode_register_code %>
     rb_register_transcoder(&rb_from_UTF8_MAC);
Index: enc/trans/emoji_iso2022_kddi.trans
===================================================================
--- enc/trans/emoji_iso2022_kddi.trans	(revision 35661)
+++ enc/trans/emoji_iso2022_kddi.trans	(revision 35662)
@@ -208,8 +208,7 @@
     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);
Index: enc/trans/korean.trans
===================================================================
--- enc/trans/korean.trans	(revision 35661)
+++ enc/trans/korean.trans	(revision 35662)
@@ -12,8 +12,7 @@
 
 <%= transcode_generated_code %>
 
-void
-Init_korean(void)
+TRANS_INIT(korean)
 {
 <%= transcode_register_code %>
 }
Index: enc/trans/japanese_euc.trans
===================================================================
--- enc/trans/japanese_euc.trans	(revision 35661)
+++ enc/trans/japanese_euc.trans	(revision 35662)
@@ -51,8 +51,7 @@
 
 <%= transcode_generated_code %>
 
-void
-Init_japanese_euc(void)
+TRANS_INIT(japanese_euc)
 {
 <%= transcode_register_code %>
 }
Index: enc/trans/big5.trans
===================================================================
--- enc/trans/big5.trans	(revision 35661)
+++ enc/trans/big5.trans	(revision 35662)
@@ -26,8 +26,7 @@
 
 <%= transcode_generated_code %>
 
-void
-Init_big5(void)
+TRANS_INIT(big5)
 {
 <%= transcode_register_code %>
 }
Index: enc/trans/japanese_sjis.trans
===================================================================
--- enc/trans/japanese_sjis.trans	(revision 35661)
+++ enc/trans/japanese_sjis.trans	(revision 35662)
@@ -27,8 +27,7 @@
 
 <%= transcode_generated_code %>
 
-void
-Init_japanese_sjis(void)
+TRANS_INIT(japanese_sjis)
 {
 <%= transcode_register_code %>
 }
Index: enc/trans/emoji_sjis_softbank.trans
===================================================================
--- enc/trans/emoji_sjis_softbank.trans	(revision 35661)
+++ enc/trans/emoji_sjis_softbank.trans	(revision 35662)
@@ -26,8 +26,7 @@
 
 <%= transcode_generated_code %>
 
-void
-Init_emoji_sjis_softbank(void)
+TRANS_INIT(emoji_sjis_softbank)
 {
 <%= transcode_register_code %>
 }
Index: enc/trans/emoji_sjis_kddi.trans
===================================================================
--- enc/trans/emoji_sjis_kddi.trans	(revision 35661)
+++ enc/trans/emoji_sjis_kddi.trans	(revision 35662)
@@ -27,8 +27,7 @@
 
 <%= transcode_generated_code %>
 
-void
-Init_emoji_sjis_kddi(void)
+TRANS_INIT(emoji_sjis_kddi)
 {
 <%= transcode_register_code %>
 }
Index: enc/depend
===================================================================
--- enc/depend	(revision 35661)
+++ enc/depend	(revision 35662)
@@ -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,47 +27,67 @@
   ''
 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
 (... truncated)

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

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