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/