mirror of
https://github.com/ruby/ruby.git
synced 2026-08-01 17:57:19 +08:00
Replace `tool/update-deps` with a Ruby source scanner so dependency updates no longer require GNU make, a configured build, or compiler preprocessor output. Keep compact source mappings and scanner declarations in dependency files, and expand complete rules into the build directory. Avoid the temporary fixture headers required by the compiler-driven prototype. Use the generated rules from GNU make, BSD make, and NMake builds. Support out-of-tree and read-only source trees, and retain expanded dependencies shipped in release archives when baseruby is unavailable.
248 lines
9.1 KiB
Plaintext
248 lines
9.1 KiB
Plaintext
# mkdepend: scan enc/jis/props.h => enc/jis/props.h.blt
|
|
|
|
% inplace = File.identical?($top_srcdir, ".")
|
|
% workdirs = %w"$(ENCSODIR) $(TRANSSODIR) enc enc/trans"
|
|
% CONFIG["WORKDIRS"] = workdirs.join(' ')
|
|
% enable_shared = CONFIG['ENABLE_SHARED'] == 'yes'
|
|
% deffile = (true if /\$\(DEFFILE\)/ =~ CONFIG["LINK_SO"])
|
|
% dependencies = ENCS + TRANS
|
|
% cleanlibs = Shellwords.shellwords(CONFIG["cleanlibs"] || "")
|
|
% cleanobjs = Shellwords.shellwords(CONFIG["cleanobjs"] || "")
|
|
% cleanobjs << "$*.def" if deffile
|
|
% rule_subst = CONFIG["RULE_SUBST"] || "%s"
|
|
% transvpath = rule_subst.dup.sub!(/\{[^{}]+\}/, '$(TRANSVPATH)/') || "enc/trans/%s"
|
|
% transvpath_prefix = (rule_subst.dup.sub!(/\{[^{}]+\}/, '{$(TRANSVPATH)}') || "%s") % ""
|
|
% CONFIG['ARFLAGS'] = 'rcu ' if (CONFIG['ARFLAGS'] || "").empty?
|
|
% CONFIG['RANLIB'] = ':' if (CONFIG['RANLIB'] || "").empty?
|
|
% CONFIG['CPPFLAGS'] += " -DRUBY_EXPORT=1" if CONFIG["EXTSTATIC"] == "static"
|
|
% if File::ALT_SEPARATOR
|
|
% pathrep = proc {|path| path.gsub('/', File::ALT_SEPARATOR).gsub(/\$\(([@<?*]\w?|\w+)\)/, "$(\\1:/=\\#{File::ALT_SEPARATOR})")}
|
|
% else
|
|
% pathrep = proc {|path| path}
|
|
% end
|
|
% ignore_error = $ignore_error
|
|
|
|
VPATH = <%=%w[$(arch_hdrdir)/ruby $(hdrdir)/ruby $(srcdir) $(encsrcdir)].join(CONFIG["PATH_SEPARATOR"])%>
|
|
LIBPATH = <%=libpathflag($DEFLIBPATH)%>
|
|
LIBS = <%=
|
|
if enable_shared or RbConfig.expand(CONFIG["LIBRUBY"].dup) != RbConfig.expand(CONFIG["LIBRUBY_A"].dup)
|
|
CONFIG['LIBRUBYARG']
|
|
else
|
|
''
|
|
end %> <%=CONFIG['LIBS']%> $(EXTLIBS)
|
|
|
|
ENCOBJS =<%ENCS.map {|e|%> enc/<%=e%>.$(OBJEXT) \
|
|
<%}%> #
|
|
ENCSOS =<%ENCS.map {|e|%> $(ENCSODIR)/<%=e%>.$(DLEXT) \
|
|
<%}%> #
|
|
ENCCLEANLIBS = <%=cleanlibs.map {|clean|
|
|
clean.gsub(/\$\*(\.\w+)?/) {"$(ENCOBJS#{$1 ? ":.#{CONFIG["OBJEXT"]}=#{$1}" : ""})"}
|
|
.gsub(/\$\(\KTARGET_SO(?=[:\)])/) {"ENCSOS"}
|
|
}.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"%> \
|
|
<%}%> #
|
|
TRANSOBJS =<%TRANS.map {|e|%> enc/<%=e%>.$(OBJEXT) \
|
|
<%}%> #
|
|
TRANSSOS =<%TRANS.map {|e|%> $(ENCSODIR)/<%=e%>.$(DLEXT) \
|
|
<%}%> #
|
|
TRANSCLEANLIBS = <%=cleanlibs.map {|clean|
|
|
clean.gsub(/\$\*(\.\w+)?/) {"$(TRANSOBJS#{$1 ? ":.#{CONFIG["OBJEXT"]}=#{$1}" : ""})"}
|
|
.gsub(/\$\(\KTARGET_SO(?=[:\)])/) {"TRANSSOS"}
|
|
}.join(" ")%>
|
|
TRANSCLEANOBJS = <%=cleanobjs.map {|clean|
|
|
clean.gsub(/\$\*(\.\w+)?/) {"$(TRANSOBJS#{$1 ? ":.#{CONFIG["OBJEXT"]}=#{$1}" : ""})"}
|
|
}.join(" ")%>
|
|
LIBTRANS=enc/libtrans.$(LIBEXT)
|
|
UNICODE_HDR_DIR = --missing-unicode-header-dir--
|
|
|
|
encs all: <%= MODULE_TYPE == :static ? "lib" : "mod" %>encs
|
|
modencs: enc trans
|
|
libencs: libenc libtrans
|
|
enc: $(ENCSOS)
|
|
libenc: $(LIBENC)
|
|
trans: $(TRANSSOS)
|
|
libtrans: $(LIBTRANS)
|
|
|
|
$(LIBENC): $(ENCOBJS)
|
|
@$(RM) $@
|
|
$(ECHO) linking statically-linked encoding library $@
|
|
$(Q) $(AR) $(ARFLAGS)$@ $(ENCOBJS)
|
|
@-$(RANLIB) $@<%=ignore_error%>
|
|
$(LIBTRANS): $(TRANSOBJS)
|
|
@$(RM) $@
|
|
$(ECHO) linking statically-linked transcoder library $@
|
|
$(Q) $(AR) $(ARFLAGS)$@ $(TRANSOBJS)
|
|
@-$(RANLIB) $@<%=ignore_error%>
|
|
|
|
enc trans $(ENCSOS) $(TRANSSOS): config.status
|
|
|
|
srcs: $(TRANSCSRCS)
|
|
|
|
$(ENC_TRANS_D):
|
|
$(Q) $(MAKEDIRS) enc/trans
|
|
@exit > $@
|
|
|
|
$(ENC_TRANS_SO_D):
|
|
$(Q) $(MAKEDIRS) $(TRANSSODIR)
|
|
@exit > $@
|
|
|
|
$(ENCOBJS) $(TRANSOBJS): $(ENC_TRANS_D)
|
|
$(ENCSOS) $(TRANSSOS): $(ENC_TRANS_SO_D)
|
|
|
|
<%=transvpath_prefix%>.trans<%=transvpath_prefix%>.c:
|
|
$(ECHO) generating table from $@
|
|
$(Q)$(MINIRUBY) "$(tooldir)/transcode-tblgen.rb" -v$(V0:1=v)o "$@" "$<"
|
|
|
|
% unless ENCS.empty? or TRANS.empty?
|
|
|
|
% ENC_DEPS.each do |e, deps|
|
|
enc/<%=e%>.$(OBJEXT): <%=deps.map {|n| rule_subst % n}.join(' ')%>
|
|
% end
|
|
% ATRANS.each do |e|
|
|
% src = "#{e}.trans"
|
|
|
|
<%=transvpath % "#{e}.c"%>: <%= transvpath % "#{e}.trans"%>
|
|
% trans = IO.read(File.join($srcdir, "trans", src))
|
|
% src = trans.scan(/^\s*require\s+[\'\"]([^\'\"]*)/).flatten.map{|c|c+".rb"}
|
|
% if src.empty?
|
|
% src = trans.scan(/^\s*transcode_tblgen_\w+\s+[\'\"]([^\'\"]*)/).flatten.map{|c|c.downcase+"-tbl.rb"}
|
|
% end
|
|
<%=transvpath % "#{e}.c"%>: <%= src.map {|s| transvpath % "#{s}"}.join(" ")%> $(tooldir)/transcode-tblgen.rb
|
|
% end
|
|
|
|
% end
|
|
% link_so = LINK_SO.gsub(/([^\\])\n/, "\\1\n$(Q) ").gsub(/\n/, "\n\t")
|
|
% link_so.gsub!(/(-(?:implib|pdb):\S+)-\$\(arch\)\./, '\1.')
|
|
% dependencies.each do |e|
|
|
% obj = "enc/#{e}.$(OBJEXT)"
|
|
% df = ("enc/#{e}.def" if deffile)
|
|
% target = e.dup
|
|
% if target.sub!(/\Atrans\//, '$(TRANSSODIR)/')
|
|
% mesg = "transcoder"
|
|
% else
|
|
% target = "$(ENCSODIR)/#{e}"
|
|
% mesg = "encoding"
|
|
% end
|
|
<%=target%>.$(DLEXT): <%=obj%>
|
|
$(ECHO) linking <%=mesg%> $(@F)
|
|
% cmd = link_so.sub(/\$\(OBJS\)/) {obj}
|
|
% base = File.basename(e)
|
|
% if df
|
|
$(Q)echo> <%=df%> EXPORTS
|
|
$(Q)echo>> <%=df%> <%=EXPORT_PREFIX%>Init_<%=base%>
|
|
% cmd.sub!(/\$\(DEFFILE\)/) {df}
|
|
% cmd.gsub!(/-(?:implib|pdb):/) {|s|"#{s}enc/#{e.sub(/[^\/]+\z/, '')}"}
|
|
% end
|
|
$(Q)<%=cmd%>
|
|
|
|
% end
|
|
% dependencies.each do |e|
|
|
<%="enc/#{e}.$(OBJEXT)"%>: <%="$(encsrcdir)/#{e}.c"%>
|
|
$(ECHO) compiling <%= "$(encsrcdir)/#{e}.c"%>
|
|
$(Q)<%=COMPILE_C.gsub(/\$(\()?<(\:[^)]+)?(\))?/){"$(encsrcdir)/#{e}.c"}%>
|
|
|
|
% end
|
|
|
|
enc/encdb.$(OBJEXT): encdb.h
|
|
enc/trans/transdb.$(OBJEXT): transdb.h
|
|
|
|
clean:
|
|
% %w[$(ENCSOS) $(LIBENC) $(ENCOBJS) $(ENCCLEANOBJS) $(ENCCLEANLIBS) $(TRANSSOS) $(LIBTRANS) $(TRANSOBJS) $(TRANSCLEANOBJS) $(TRANSCLEANLIBS) $(ENC_TRANS_D) $(ENC_TRANS_SO_D)].each do |clean|
|
|
$(Q)$(RMALL) <%=pathrep[clean]%>
|
|
% end
|
|
% unless inplace
|
|
$(Q)$(RM) enc/unicode/*/casefold.h enc/unicode/*/name2ctype.h
|
|
$(Q)$(RM) enc/trans/newline.c enc/jis/props.h
|
|
-$(Q)$(RMDIR) enc/trnas enc/unicode<%=ignore_error%>
|
|
% end
|
|
% workdirs.reverse_each do|d|
|
|
-$(Q)$(RMDIR) <%=pathrep[d]%><%=ignore_error%>
|
|
% end
|
|
|
|
clean-srcs:
|
|
$(Q)$(RM) <%=pathrep['$(TRANSCSRCS)']%> <%=pathrep['$(BUILTIN_TRANS_CSRCS)']%>
|
|
-$(Q)$(RMDIR) <%=pathrep['enc/trans']%><%=ignore_error%>
|
|
$(Q)$(RM) enc/unicode/*/casefold.h enc/unicode/*/name2ctype.h
|
|
$(Q)$(RM) enc/jis/props.h
|
|
-$(Q)$(RMDIR) <%=pathrep['enc/unicode']%><%=ignore_error%>
|
|
-$(Q)$(RMDIR) <%=pathrep['enc/props']%><%=ignore_error%>
|
|
-$(Q)$(RMDIR) <%=pathrep['enc']%><%=ignore_error%>
|
|
|
|
<%# vim: set ft=eruby noexpandtab ts=8 sw=2 : -%>
|
|
|
|
# AUTOGENERATED DEPENDENCIES START
|
|
enc/ascii.$(OBJEXT): enc/ascii.c
|
|
enc/big5.$(OBJEXT): enc/big5.c
|
|
enc/cesu_8.$(OBJEXT): enc/cesu_8.c
|
|
enc/cp949.$(OBJEXT): enc/cp949.c
|
|
enc/emacs_mule.$(OBJEXT): enc/emacs_mule.c
|
|
enc/encdb.$(OBJEXT): enc/encdb.c
|
|
enc/euc_jp.$(OBJEXT): enc/euc_jp.c
|
|
enc/euc_kr.$(OBJEXT): enc/euc_kr.c
|
|
enc/euc_tw.$(OBJEXT): enc/euc_tw.c
|
|
enc/gb18030.$(OBJEXT): enc/gb18030.c
|
|
enc/gb2312.$(OBJEXT): enc/gb2312.c
|
|
enc/gbk.$(OBJEXT): enc/gbk.c
|
|
enc/iso_8859_1.$(OBJEXT): enc/iso_8859_1.c
|
|
enc/iso_8859_10.$(OBJEXT): enc/iso_8859_10.c
|
|
enc/iso_8859_11.$(OBJEXT): enc/iso_8859_11.c
|
|
enc/iso_8859_13.$(OBJEXT): enc/iso_8859_13.c
|
|
enc/iso_8859_14.$(OBJEXT): enc/iso_8859_14.c
|
|
enc/iso_8859_15.$(OBJEXT): enc/iso_8859_15.c
|
|
enc/iso_8859_16.$(OBJEXT): enc/iso_8859_16.c
|
|
enc/iso_8859_2.$(OBJEXT): enc/iso_8859_2.c
|
|
enc/iso_8859_3.$(OBJEXT): enc/iso_8859_3.c
|
|
enc/iso_8859_4.$(OBJEXT): enc/iso_8859_4.c
|
|
enc/iso_8859_5.$(OBJEXT): enc/iso_8859_5.c
|
|
enc/iso_8859_6.$(OBJEXT): enc/iso_8859_6.c
|
|
enc/iso_8859_7.$(OBJEXT): enc/iso_8859_7.c
|
|
enc/iso_8859_8.$(OBJEXT): enc/iso_8859_8.c
|
|
enc/iso_8859_9.$(OBJEXT): enc/iso_8859_9.c
|
|
enc/koi8_r.$(OBJEXT): enc/koi8_r.c
|
|
enc/koi8_u.$(OBJEXT): enc/koi8_u.c
|
|
enc/shift_jis.$(OBJEXT): enc/shift_jis.c
|
|
enc/trans/big5.$(OBJEXT): enc/trans/big5.c
|
|
enc/trans/cesu_8.$(OBJEXT): enc/trans/cesu_8.c
|
|
enc/trans/chinese.$(OBJEXT): enc/trans/chinese.c
|
|
enc/trans/ebcdic.$(OBJEXT): enc/trans/ebcdic.c
|
|
enc/trans/emoji.$(OBJEXT): enc/trans/emoji.c
|
|
enc/trans/emoji_iso2022_kddi.$(OBJEXT): enc/trans/emoji_iso2022_kddi.c
|
|
enc/trans/emoji_sjis_docomo.$(OBJEXT): enc/trans/emoji_sjis_docomo.c
|
|
enc/trans/emoji_sjis_kddi.$(OBJEXT): enc/trans/emoji_sjis_kddi.c
|
|
enc/trans/emoji_sjis_softbank.$(OBJEXT): enc/trans/emoji_sjis_softbank.c
|
|
enc/trans/escape.$(OBJEXT): enc/trans/escape.c
|
|
enc/trans/gb18030.$(OBJEXT): enc/trans/gb18030.c
|
|
enc/trans/gbk.$(OBJEXT): enc/trans/gbk.c
|
|
enc/trans/iso2022.$(OBJEXT): enc/trans/iso2022.c
|
|
enc/trans/japanese.$(OBJEXT): enc/trans/japanese.c
|
|
enc/trans/japanese_euc.$(OBJEXT): enc/trans/japanese_euc.c
|
|
enc/trans/japanese_sjis.$(OBJEXT): enc/trans/japanese_sjis.c
|
|
enc/trans/korean.$(OBJEXT): enc/trans/korean.c
|
|
enc/trans/newline.$(OBJEXT): enc/trans/newline.c
|
|
enc/trans/single_byte.$(OBJEXT): enc/trans/single_byte.c
|
|
enc/trans/transdb.$(OBJEXT): enc/trans/transdb.c
|
|
enc/trans/utf8_mac.$(OBJEXT): enc/trans/utf8_mac.c
|
|
enc/trans/utf_16_32.$(OBJEXT): enc/trans/utf_16_32.c
|
|
enc/unicode.$(OBJEXT): enc/unicode.c
|
|
enc/us_ascii.$(OBJEXT): enc/us_ascii.c
|
|
enc/utf_16be.$(OBJEXT): enc/utf_16be.c
|
|
enc/utf_16le.$(OBJEXT): enc/utf_16le.c
|
|
enc/utf_32be.$(OBJEXT): enc/utf_32be.c
|
|
enc/utf_32le.$(OBJEXT): enc/utf_32le.c
|
|
enc/utf_8.$(OBJEXT): enc/utf_8.c
|
|
enc/windows_1250.$(OBJEXT): enc/windows_1250.c
|
|
enc/windows_1251.$(OBJEXT): enc/windows_1251.c
|
|
enc/windows_1252.$(OBJEXT): enc/windows_1252.c
|
|
enc/windows_1253.$(OBJEXT): enc/windows_1253.c
|
|
enc/windows_1254.$(OBJEXT): enc/windows_1254.c
|
|
enc/windows_1257.$(OBJEXT): enc/windows_1257.c
|
|
enc/windows_31j.$(OBJEXT): enc/windows_31j.c
|
|
# AUTOGENERATED DEPENDENCIES END
|