mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	 775188a0a2
			
		
	
	
		775188a0a2
		
	
	
	
	
		
			
			* lib/mkmf.rb: ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@28883 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
		
			
				
	
	
		
			145 lines
		
	
	
	
		
			5.3 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			145 lines
		
	
	
	
		
			5.3 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| % CONFIG["DLDFLAGS"].sub!(/(\A|\s)(-\S+(?:\s*\w*)?\$\(TARGET\)\S*)/, '\1')
 | |
| % 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
 | |
| % 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
 | |
| % 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)}') || "") % ""
 | |
| % 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
 | |
| 
 | |
| 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)"}.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(" ")%>
 | |
| 
 | |
| 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%>
 | |
| 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(" ")%>
 | |
| 
 | |
| encs: all
 | |
| all: enc trans
 | |
| enc: $(ENCSOS)
 | |
| trans: $(TRANSSOS)
 | |
| 
 | |
| srcs: $(TRANSCSRCS)
 | |
| 
 | |
| <%=transvpath_prefix%>.trans<%=transvpath_prefix%>.c:
 | |
| 	$(MINIRUBY) "$(srcdir)/tool/transcode-tblgen.rb" -vo "$@" "$<"
 | |
| 
 | |
| % unless encs.empty? or trans.empty?
 | |
| 
 | |
| %   unless encs.empty?
 | |
| $(ENCOBJS): regenc.h oniguruma.h config.h defines.h
 | |
| %   end
 | |
| %   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|
 | |
| %     src = "#{e}.trans"
 | |
| 
 | |
| <%=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
 | |
| %   end
 | |
| 
 | |
| % end
 | |
| % link_so = LINK_SO.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)
 | |
| $(ENCSODIR)/<%=e%>.$(DLEXT): <%=obj%>
 | |
| %   cmd = link_so.sub(/\$\(OBJS\)/) {obj}
 | |
| %   base = File.basename(e)
 | |
| %   cmd.sub!(/(?=\$\(DLDFLAGS\))/) {dldflags.sub(/\$\(TARGET\)/) {base} + " "} if dldflags
 | |
| %   if df
 | |
| 	echo> <%=df%> EXPORTS
 | |
| 	echo>> <%=df%> <%=EXPORT_PREFIX%>Init_<%=base%>
 | |
| %     cmd.sub!(/\$\(DEFFILE\)/) {df}
 | |
| %     cmd.gsub!(/-(?:implib|pdb):/) {|s|"#{s}enc/#{e.sub(/[^\/]+\z/, '')}"}
 | |
| %   end
 | |
| 	@$(MAKEDIRS) "$(@D)"
 | |
| 	<%=cmd%>
 | |
| 
 | |
| % end
 | |
| % dependencies.each do |e|
 | |
| <%="enc/#{e}.$(OBJEXT)"%>: <%="$(encsrcdir)/#{e}.c"%>
 | |
| 	-@$(MAKEDIRS) "$(@D)"
 | |
| 	<%=COMPILE_C.gsub(/\$(\()?<(\:[^)]+)?(\))?/){"$(encsrcdir)/#{e}.c"}%>
 | |
| 
 | |
| % end
 | |
| 
 | |
| enc/encdb.$(OBJEXT): encdb.h
 | |
| enc/trans/transdb.$(OBJEXT): transdb.h
 | |
| 
 | |
| clean:
 | |
| % %w[$(ENCSOS) $(ENCOBJS) $(ENCCLEANOBJS) $(ENCCLEANLIBS) $(TRANSSOS) $(TRANSOBJS) $(TRANSCLEANOBJS) $(TRANSCLEANLIBS)].each do |clean|
 | |
| 	@$(RM) <%=pathrep[clean]%>
 | |
| % end
 | |
| % @ignore_error = $nmake ? '' : ' 2> /dev/null || true'
 | |
| % %w[$(TRANSSODIR) $(ENCSODIR)].each do|dir|
 | |
| 	@-$(RMDIR) <%=pathrep[dir]%><%=@ignore_error%>
 | |
| % end
 | |
| 
 | |
| clean-srcs:
 | |
| 	@$(RM) <%=pathrep['$(TRANSCSRCS)']%>
 | |
| 	@-$(RMDIR) <%=pathrep['enc/trans']%><%=@ignore_error%>
 | |
| 	@$(RM) enc/unicode/name2ctype.h
 | |
| 	@-$(RMDIR) <%=pathrep['enc/unicode']%><%=@ignore_error%>
 | |
| 	@-$(RMDIR) <%=pathrep['enc']%><%=@ignore_error%>
 |