2007-12-24 06:49:56 +03:00
|
|
|
% deffile = (true if /\$\(DEFFILE\)/ =~ CONFIG["LINK_SO"])
|
2007-12-22 21:35:53 +03:00
|
|
|
% encs = Dir.open($srcdir) {|d| d.grep(/.+\.c\z/)} - BUILTIN_ENCS
|
|
|
|
% encs.each {|e| e.chomp!(".c")}
|
2008-08-12 09:25:14 +04:00
|
|
|
% 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)}}
|
2008-02-22 03:07:23 +03:00
|
|
|
% alphanumeric_order = proc {|e| e.scan(/(\d+)|(\D+)/).map {|n,a| a||[n.size,n.to_i]}.flatten}
|
2007-12-24 06:49:56 +03:00
|
|
|
% encs = encs.sort_by(&alphanumeric_order)
|
2008-08-07 12:47:58 +04:00
|
|
|
% encs.unshift(encs.delete("encdb"))
|
2008-08-05 22:15:52 +04:00
|
|
|
% atrans = []
|
|
|
|
% trans = Dir.open($srcdir+"/trans") {|d|
|
|
|
|
% d.select {|e|
|
2008-08-11 11:39:52 +04:00
|
|
|
% if e.chomp!('.trans')
|
|
|
|
% atrans << e
|
|
|
|
% true
|
|
|
|
% elsif e.chomp!('.c')
|
2008-08-05 22:15:52 +04:00
|
|
|
% true
|
|
|
|
% end
|
|
|
|
% }
|
|
|
|
% }
|
|
|
|
% trans.uniq!
|
|
|
|
% atrans = atrans.sort_by(&alphanumeric_order)
|
2007-12-24 06:49:56 +03:00
|
|
|
% trans = trans.sort_by(&alphanumeric_order)
|
2008-08-07 12:47:58 +04:00
|
|
|
% trans.unshift(trans.delete("transdb"))
|
2008-08-12 09:25:14 +04:00
|
|
|
% trans |= atrans
|
2007-12-24 06:49:56 +03:00
|
|
|
% trans.map! {|e| "trans/#{e}"}
|
|
|
|
% dependencies = encs + trans
|
2008-08-07 09:17:34 +04:00
|
|
|
% cleanlibs = Shellwords.shellwords(CONFIG["cleanlibs"] || "")
|
|
|
|
% cleanobjs = Shellwords.shellwords(CONFIG["cleanobjs"] || "")
|
|
|
|
% rule_subst = CONFIG["RULE_SUBST"] || "%s"
|
2008-08-12 09:25:14 +04:00
|
|
|
% transvpath = rule_subst.dup.sub!(/\{[^{}]+\}/, '$(TRANSVPATH)/') || "enc/trans/%s"
|
|
|
|
% transvpath_prefix = rule_subst.dup.sub!(/\{[^{}]+\}/, '{$(TRANSVPATH)}') || ""
|
2008-08-07 09:17:34 +04:00
|
|
|
% if File::ALT_SEPARATOR
|
2008-08-10 06:45:18 +04:00
|
|
|
% pathrep = proc {|path| path.gsub('/', File::ALT_SEPARATOR).gsub(/\$\(([@<?*]\w?|\w+)\)/, "$(\\1:/=\\#{File::ALT_SEPARATOR})")}
|
2008-08-07 09:17:34 +04:00
|
|
|
% else
|
|
|
|
% pathrep = proc {|path| path}
|
|
|
|
% end
|
2007-12-24 06:49:56 +03:00
|
|
|
|
|
|
|
VPATH = <%=%w[$(arch_hdrdir)/ruby $(hdrdir)/ruby $(srcdir) $(encsrcdir)].join(CONFIG["PATH_SEPARATOR"])%>
|
2007-12-22 21:35:53 +03:00
|
|
|
LIBPATH = <%=libpathflag($DEFLIBPATH)%>
|
2007-12-17 19:15:46 +03:00
|
|
|
|
2007-12-24 06:49:56 +03:00
|
|
|
ENCOBJS = <%=encs.map {|e|"enc/#{e}.$(OBJEXT)"}.join(" \\\n\t ")%><%="\n" if encs.size>1%>
|
2008-08-07 09:17:34 +04:00
|
|
|
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(" ")%>
|
2007-12-17 19:15:46 +03:00
|
|
|
|
2008-08-12 09:25:14 +04:00
|
|
|
TRANSVPATH = $(srcdir)/enc/trans
|
|
|
|
|
|
|
|
TRANSCSRCS = <%=atrans.map {|e| transvpath % "#{e}.c"}.join(" \\\n\t ")%><%="\n" if trans.size>1%>
|
2007-12-24 06:49:56 +03:00
|
|
|
TRANSOBJS = <%=trans.map {|e|"enc/#{e}.$(OBJEXT)"}.join(" \\\n\t ")%><%="\n" if trans.size>1%>
|
2008-08-07 09:17:34 +04:00
|
|
|
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(" ")%>
|
2007-12-24 06:49:56 +03:00
|
|
|
|
2008-08-07 09:17:34 +04:00
|
|
|
all: $(ENCSOS) $(TRANSSOS)
|
2008-08-06 09:40:13 +04:00
|
|
|
|
|
|
|
srcs: $(TRANSCSRCS)
|
2007-12-17 11:19:29 +03:00
|
|
|
|
2008-08-07 09:17:34 +04:00
|
|
|
% if rule = (compile_rules = COMPILE_RULES).find(&/\$\(srcdir\)/.method(:=~))
|
|
|
|
% compile_rules = [rule.sub(/\$\(srcdir\)/, '\&/enc'), rule.sub(/\$\(srcdir\)/, '\&/enc/trans')] + compile_rules
|
|
|
|
% end
|
|
|
|
% compile_rules.each do |rule|
|
2007-12-22 21:35:53 +03:00
|
|
|
<%= rule % %w[c $(OBJEXT)] %>
|
2008-08-12 09:25:14 +04:00
|
|
|
-@$(MAKEDIRS) "$(@D)"
|
2007-12-22 21:35:53 +03:00
|
|
|
<%=COMPILE_C%>
|
2007-12-20 11:07:56 +03:00
|
|
|
|
2007-12-22 21:35:53 +03:00
|
|
|
% end
|
2008-08-12 09:25:14 +04:00
|
|
|
|
|
|
|
<%=transvpath_prefix%>.trans<%=transvpath_prefix%>.c:
|
|
|
|
$(MINIRUBY) "$(srcdir)/tool/transcode-tblgen.rb" -vo "$@" "$<"
|
|
|
|
|
2007-12-24 06:49:56 +03:00
|
|
|
% unless encs.empty? or trans.empty?
|
2007-12-17 19:15:46 +03:00
|
|
|
|
2007-12-24 06:49:56 +03:00
|
|
|
% unless encs.empty?
|
2007-12-17 11:19:29 +03:00
|
|
|
$(ENCOBJS): regenc.h oniguruma.h config.h defines.h
|
2007-12-24 06:49:56 +03:00
|
|
|
% end
|
|
|
|
% unless trans.empty?
|
2008-01-01 19:20:56 +03:00
|
|
|
$(TRANSOBJS): ruby.h intern.h config.h defines.h missing.h encoding.h oniguruma.h st.h transcode_data.h
|
2007-12-24 06:49:56 +03:00
|
|
|
% end
|
2008-08-05 22:15:52 +04:00
|
|
|
% atrans.each do |e|
|
2008-08-11 11:39:52 +04:00
|
|
|
% src = "#{e}.trans"
|
2008-08-05 22:15:52 +04:00
|
|
|
|
2008-08-12 09:25:14 +04:00
|
|
|
<%=transvpath % "#{e}.c"%>: <%= transvpath % "#{e}.trans"%>
|
|
|
|
% src = [*IO.read(File.join($srcdir, "trans", src)).scan(/^\s*require\s+[\'\"]([^\'\"]*)/).flatten.map{|c|c+".rb"}]
|
|
|
|
<%=transvpath % "#{e}.c"%>: <%= src.map {|e| transvpath % "#{e}"}.join(" ")%> $(srcdir)/tool/transcode-tblgen.rb
|
2008-08-05 22:15:52 +04:00
|
|
|
% end
|
2007-12-22 21:35:53 +03:00
|
|
|
|
|
|
|
% end
|
|
|
|
% link_so = LINK_SO.gsub(/\n/, "\n\t")
|
2007-12-24 06:49:56 +03:00
|
|
|
% link_so.gsub!(/(-(?:implib|pdb):\S+)-\$\(arch\)\./, '\1.')
|
|
|
|
% dependencies.each do |e|
|
|
|
|
% obj = "enc/#{e}.$(OBJEXT)"
|
|
|
|
% df = ("enc/#{e}.def" if deffile)
|
|
|
|
$(ENCSODIR)/<%=e%>.$(DLEXT): <%=obj%>
|
|
|
|
% if df
|
2008-08-12 09:25:14 +04:00
|
|
|
echo> <%=df%> EXPORTS
|
|
|
|
echo>> <%=df%> <%=EXPORT_PREFIX%>Init_<%=File.basename(e)%>
|
2007-12-22 21:35:53 +03:00
|
|
|
% end
|
2008-08-10 06:45:18 +04:00
|
|
|
@$(MAKEDIRS) "$(@D)"
|
2008-02-13 10:26:52 +03:00
|
|
|
<%=link_so.sub(/\$\(OBJS\)/) {obj}.sub(/\$\(DEFFILE\)/) {df}.gsub(/-(?:implib|pdb):/) {|s|"#{s}enc/#{e.sub(/[^\/]+\z/, '')}"}%>
|
2007-12-24 06:49:56 +03:00
|
|
|
|
2007-12-22 21:35:53 +03:00
|
|
|
% end
|
2007-12-24 06:49:56 +03:00
|
|
|
% dependencies.each do |e|
|
2008-08-07 09:17:34 +04:00
|
|
|
<%=rule_subst % "enc/#{e}.$(OBJEXT)"%>: <%=rule_subst % "enc/#{e}.c"%>
|
2007-12-22 21:35:53 +03:00
|
|
|
% end
|
2007-12-19 20:23:24 +03:00
|
|
|
|
2008-04-07 10:51:33 +04:00
|
|
|
enc/encdb.$(OBJEXT): encdb.h
|
|
|
|
enc/trans/transdb.$(OBJEXT): transdb.h
|
|
|
|
|
2007-12-19 20:23:24 +03:00
|
|
|
clean:
|
2008-08-07 09:17:34 +04:00
|
|
|
% %w[$(ENCSOS) $(ENCOBJS) $(ENCCLEANOBJS) $(ENCCLEANLIBS) $(TRANSSOS) $(TRANSOBJS) $(TRANSCLEANOBJS) $(TRANSCLEANLIBS) $(TRANSCSRCS)].each do |clean|
|
|
|
|
@$(RM) <%=pathrep[clean]%>
|
|
|
|
% end
|
2008-06-09 16:17:29 +04:00
|
|
|
% %w[$(ENCSODIR)/trans $(ENCSODIR) enc/trans enc].each do|dir|
|
2008-08-07 09:17:34 +04:00
|
|
|
@-rmdir <%=pathrep[dir]%>
|
2008-06-09 16:17:29 +04:00
|
|
|
% end
|