diff --git a/ChangeLog b/ChangeLog index c2ceef03a2..3d27d77add 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +Mon Dec 24 12:49:54 2007 Nobuyoshi Nakada + + * Makefile.in, configure.in, lib/mkmf.rb, */Makefile.sub: specify + compiled output file name explicitly. + + * enc/Makefile.in, enc/depend: now makes compiler to put generated + files under directories corresnponding to the each source. + enc/trans supported. + + * enc/make_encmake.rb: evaluates depend file before Makefile.in so + that the former can influence to CONFIG. + Mon Dec 24 12:35:03 2007 Nobuyoshi Nakada * win{32,ce}/Makefile.sub (MFLAGS): defaulted to -l. @@ -5,7 +17,7 @@ Mon Dec 24 12:35:03 2007 Nobuyoshi Nakada Mon Dec 24 12:08:10 2007 Eric Hodel * /, ext/: Add svn:ignore for OS X Xcode 3's conftest.dSYM - directories. + directories. Mon Dec 24 11:56:31 2007 Nobuyoshi Nakada diff --git a/Makefile.in b/Makefile.in index 32b698a0df..d4da5d62bd 100644 --- a/Makefile.in +++ b/Makefile.in @@ -37,6 +37,7 @@ VPATH = $(arch_hdrdir)/ruby:$(hdrdir)/ruby:$(srcdir):$(srcdir)/enc:$(srcdir)/mis empty = OUTFLAG = @OUTFLAG@$(empty) +COUTFLAG = @COUTFLAG@$(empty) CFLAGS = @CFLAGS@ @ARCH_FLAG@ XCFLAGS = -I. -I$(arch_hdrdir) -I$(hdrdir) -I$(srcdir) @XCFLAGS@ CPPFLAGS = @CPPFLAGS@ @@ -182,13 +183,13 @@ lex.c: keywords fi .c.@OBJEXT@: - $(CC) $(CFLAGS) $(XCFLAGS) $(CPPFLAGS) -c $< + $(CC) $(CFLAGS) $(XCFLAGS) $(CPPFLAGS) $(COUTFLAG)$@ -c $< .s.@OBJEXT@: $(AS) $(ASFLAGS) -o $@ $< .c.S: - $(CC) $(CFLAGS) $(XCFLAGS) $(CPPFLAGS) -S $< + $(CC) $(CFLAGS) $(XCFLAGS) $(CPPFLAGS) $(COUTFLAG)$@ -S $< clean-local:: @$(RM) ext/extinit.c ext/extinit.$(OBJEXT) @@ -197,4 +198,4 @@ distclean-local:: @$(RM) ext/config.cache $(RBCONFIG) ext/extinit.$(OBJEXT): ext/extinit.c $(SETUP) - $(CC) $(CFLAGS) $(XCFLAGS) $(CPPFLAGS) $(OUTFLAG)$@ -c ext/extinit.c + $(CC) $(CFLAGS) $(XCFLAGS) $(CPPFLAGS) $(COUTFLAG)$@ -c ext/extinit.c diff --git a/bcc32/Makefile.sub b/bcc32/Makefile.sub index cba378ac89..4968eff2b6 100644 --- a/bcc32/Makefile.sub +++ b/bcc32/Makefile.sub @@ -128,6 +128,7 @@ RDOCTARGET = install-doc !endif OUTFLAG = -o +COUTFLAG = -o !ifndef CFLAGS CFLAGS = -q -tWR -tWC $(DEBUGFLAGS) $(OPTFLAGS) $(PROCESSOR_FLAG) -w- -wsus -wcpt -wdup -wext -wrng -wrpt -wzdi !endif @@ -214,10 +215,10 @@ VPATH = $(arch_hdrdir)/ruby;$(hdrdir)/ruby;$(srcdir);$(srcdir)/enc;$(srcdir)/mis .path. = $(srcdir) .c.obj: - $(CC) $(CFLAGS) $(XCFLAGS) -I. $(CPPFLAGS) -c $(<:/=\) + $(CC) $(CFLAGS) $(XCFLAGS) -I. $(CPPFLAGS) $(COUTFLAG)$@ -c $(<:/=\) .c.asm: - $(CC) $(CFLAGS) $(XCFLAGS) -I. $(CPPFLAGS) -S $(<:\=/) + $(CC) $(CFLAGS) $(XCFLAGS) -I. $(CPPFLAGS) $(COUTFLAG)$@ -S $(<:\=/) .rc.res: $(RC) $(RFLAGS) -I. -I$( +VPATH = <%=%w[$(arch_hdrdir)/ruby $(hdrdir)/ruby $(srcdir) $(encsrcdir)].join(CONFIG["PATH_SEPARATOR"])%> LIBPATH = <%=libpathflag($DEFLIBPATH)%> -ENCOBJS = <%=encs.map {|e|"#{e}.$(OBJEXT)"}.join(" \\\n\t ")%><%="\n" if encs.size>1%> -ENCDEFS = <%=encs.map {|e|"#{e}.def"}.join(" \\\n\t ") if DEFFILE%><%="\n" if encs.size>1%> +ENCOBJS = <%=encs.map {|e|"enc/#{e}.$(OBJEXT)"}.join(" \\\n\t ")%><%="\n" if encs.size>1%> +ENCDEFS = <%=encs.map {|e|"enc/#{e}.def"}.join(" \\\n\t ") if deffile%><%="\n" if encs.size>1%> ENCSOS = <%=encs.map {|e|"$(ENCSODIR)/#{e}.$(DLEXT)"}.join(" \\\n\t ")%> -all: $(ENCSOS) +TRANSOBJS = <%=trans.map {|e|"enc/#{e}.$(OBJEXT)"}.join(" \\\n\t ")%><%="\n" if trans.size>1%> +TRANSDEFS = <%=trans.map {|e|"enc/#{e}.def"}.join(" \\\n\t ") if deffile%><%="\n" if trans.size>1%> +TRANSSOS = <%=trans.map {|e|"$(ENCSODIR)/#{e}.$(DLEXT)"}.join(" \\\n\t ")%> + +all: $(ENCSOS) $(TRANSSOS) % COMPILE_RULES.each do |rule| <%= rule % %w[c $(OBJEXT)] %> <%=COMPILE_C%> % end -% unless encs.empty? +% unless encs.empty? or trans.empty? +% unless encs.empty? $(ENCOBJS): regenc.h oniguruma.h config.h defines.h - -% encs.each do |e| -<%=e%>.so: $(ENCSODIR)/<%=e%>.$(DLEXT) -% end +% end +% unless trans.empty? +$(TRANSOBJS): ruby.h intern.h config.h defines.h transcode_data.h +% end % end % link_so = LINK_SO.gsub(/\n/, "\n\t") -% encs.each do |e| -% deps = "#{e}.$(OBJEXT)" -% deps << " #{e}-$(arch).def" if DEFFILE -$(ENCSODIR)/<%=e%>.$(DLEXT): <%=deps%> - <%=link_so.sub(/\$\(OBJS\)/, deps)%> - -% end -% if DEFFILE -% encs.each do |e| -<%=e%>-$(arch).def: enc.mk - echo EXPORTS > $@ - echo <%=EXPORT_PREFIX%>Init_<%=e%> >> $@ - +% 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 + echo EXPORTS > <%=df%> + echo <%=EXPORT_PREFIX%>Init_<%=File.basename(e)%> >> <%=df%> % end + <%=link_so.sub(/\$\(OBJS\)/) {obj}.sub(/\$\(DEFFILE\)/) {df}.gsub(/-(?:implib|pdb):/) {|s|"#{s}enc/#{e.sub(/[^\/]+\z/, '')}"}%> + % end -% encs.each do |e| -<%=e%>.$(OBJEXT): <%=e%>.c +% dependencies.each do |e| +enc/<%=e%>.$(OBJEXT): $(srcdir)/enc/<%=e%>.c + <%=COMPILE_C.sub(/\$\(<(?:.*)\)/) {"$(srcdir)/enc/#{e}.c"}%> % end clean: $(RM) $(ENCSOS) $(RM) $(ENCDEFS) $(RM) $(ENCOBJS) - -distclean: clean - $(RM) enc.mk + $(RM) $(TRANSSOS) + $(RM) $(TRANSDEFS) + $(RM) $(TRANSOBJS) diff --git a/enc/make_encmake.rb b/enc/make_encmake.rb index 7b03149854..d491b28d6e 100644 --- a/enc/make_encmake.rb +++ b/enc/make_encmake.rb @@ -14,16 +14,16 @@ else BUILTIN_ENCS = [] end -DEFFILE = (true if CONFIG["DLDFLAGS"].sub!(/\s+-def:\$\(DEFFILE\)\s+/, ' ')) - -mkin = File.read(File.join($srcdir, "Makefile.in")) -mkin.gsub!(/@(#{CONFIG.keys.join('|')})@/) {CONFIG[$1]} if File.exist?(depend = File.join($srcdir, "depend")) erb = ERB.new(File.read(depend), nil, '%') erb.filename = depend tmp = erb.result(binding) - mkin << "\n#### depend ####\n\n" << depend_rules(tmp).join + dep = "\n#### depend ####\n\n" << depend_rules(tmp).join +else + dep = "" end +mkin = File.read(File.join($srcdir, "Makefile.in")) +mkin.gsub!(/@(#{CONFIG.keys.join('|')})@/) {CONFIG[$1]} open(ARGV[0], 'wb') {|f| - f.puts mkin + f.puts mkin, dep } diff --git a/lib/mkmf.rb b/lib/mkmf.rb index d93826cce3..2038f5f4cd 100644 --- a/lib/mkmf.rb +++ b/lib/mkmf.rb @@ -160,6 +160,7 @@ else end OUTFLAG = CONFIG['OUTFLAG'] +COUTFLAG = CONFIG['COUTFLAG'] CPPOUTFILE = CONFIG['CPPOUTFILE'] CONFTEST_C = "conftest.c".freeze @@ -1211,6 +1212,8 @@ LIBRUBY = #{CONFIG['LIBRUBY']} LIBRUBY_A = #{CONFIG['LIBRUBY_A']} LIBRUBYARG_SHARED = #$LIBRUBYARG_SHARED LIBRUBYARG_STATIC = #$LIBRUBYARG_STATIC +OUTFLAG = #{OUTFLAG} +COUTFLAG = #{COUTFLAG} RUBY_EXTCONF_H = #{$extconf_h} CFLAGS = #{$static ? '' : CONFIG['CCDLFLAGS']} #$CFLAGS #$ARCH_FLAG @@ -1289,7 +1292,7 @@ def depend_rules(depend) implicit = [[m[1], m[2]], [m.post_match]] next elsif RULE_SUBST and /\A(?!\s*\w+\s*=)[$\w][^#]*:/ =~ line - line.gsub!(%r"(?<=\s)(?!\.)([^$(){}+=:\s\/\\,]+)(?=\s|\z)", &RULE_SUBST.method(:%)) + line.gsub!(%r"(?<=\s)(?![./\\])([^$(){}+=:\s,]+)(?=\s|\z)", &RULE_SUBST.method(:%)) end depout << line end @@ -1700,8 +1703,8 @@ COMMON_LIBS = config_string('COMMON_LIBS', &split) || [] COMPILE_RULES = config_string('COMPILE_RULES', &split) || %w[.%s.%s:] RULE_SUBST = config_string('RULE_SUBST') -COMPILE_C = config_string('COMPILE_C') || '$(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) -c $<' -COMPILE_CXX = config_string('COMPILE_CXX') || '$(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) -c $<' +COMPILE_C = config_string('COMPILE_C') || '$(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -c $<' +COMPILE_CXX = config_string('COMPILE_CXX') || '$(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $<' TRY_LINK = config_string('TRY_LINK') || "$(CC) #{OUTFLAG}conftest $(INCFLAGS) $(CPPFLAGS) " \ "$(CFLAGS) $(src) $(LIBPATH) $(LDFLAGS) $(ARCH_FLAG) $(LOCAL_LIBS) $(LIBS)" diff --git a/win32/Makefile.sub b/win32/Makefile.sub index 92582ff2a5..792e83474d 100644 --- a/win32/Makefile.sub +++ b/win32/Makefile.sub @@ -132,6 +132,7 @@ RDOCTARGET = install-doc !endif OUTFLAG = -Fe +COUTFLAG = -Fo !if !defined(CFLAGS) CFLAGS = -MD $(DEBUGFLAGS) $(OPTFLAGS) $(PROCESSOR_FLAG) !endif @@ -439,7 +440,7 @@ s,@EXEEXT@,.exe,;t t s,@OBJEXT@,$(OBJEXT),;t t s,@XCFLAGS@,$(XCFLAGS),;t t s,@XLDFLAGS@,$(XLDFLAGS),;t t -s,@DLDFLAGS@,$(DLDFLAGS) $$(LIBPATH) -def:$$(DEFFILE) -implib:$$(*F:.so=)-$$(arch).lib -pdb:$$(*F:.so=)-$$(arch).pdb,;t t +s,@DLDFLAGS@,$(DLDFLAGS) $$(LIBPATH),;t t s,@ARCH_FLAG@,$(ARCH_FLAG),;t t s,@STATIC@,$(STATIC),;t t s,@CCDLFLAGS@,,;t t @@ -472,17 +473,18 @@ s,@SOLIBS@,$(SOLIBS),;t t s,@DLDLIBS@,$(DLDLIBS),;t t s,@ENABLE_SHARED@,yes,;t t s,@OUTFLAG@,$(OUTFLAG),;t t +s,@COUTFLAG@,$(COUTFLAG),;t t s,@CPPOUTFILE@,-P,;t t s,@LIBPATHFLAG@, -libpath:"%s",;t t s,@RPATHFLAG@,,;t t s,@LIBARG@,%s.lib,;t t -s,@LINK_SO@,$$(LDSHARED) -Fe$$(@) $$(OBJS) $$(LIBS) $$(LOCAL_LIBS) $$(DLDFLAGS),;t t +s,@LINK_SO@,$$(LDSHARED) -Fe$$(@) $$(OBJS) $$(LIBS) $$(LOCAL_LIBS) $$(DLDFLAGS) -implib:$$(*F:.so=)-$$(arch).lib -pdb:$$(*F:.so=)-$$(arch).pdb -def:$$(DEFFILE),;t t !if $(MSC_VER) >= 1400 s,@LINK_SO@,$(MANIFESTTOOL) -manifest $$(@).manifest -outputresource:$$(@);2,;t t s,@LINK_SO@,@$$(RM) $$(@:/=\).manifest,;t t !endif -s,@COMPILE_C@,$$(CC) $$(INCFLAGS) $$(CFLAGS) $$(CPPFLAGS) -c -Tc$$(<:\=/),;t t -s,@COMPILE_CXX@,$$(CXX) $$(INCFLAGS) $$(CXXFLAGS) $$(CPPFLAGS) -c -Tp$$(<:\=/),;t t +s,@COMPILE_C@,$$(CC) $$(INCFLAGS) $$(CFLAGS) $$(CPPFLAGS) $$(COUTFLAG)$$(@) -c -Tc$$(<:\=/),;t t +s,@COMPILE_CXX@,$$(CXX) $$(INCFLAGS) $$(CXXFLAGS) $$(CPPFLAGS) $$(COUTFLAG)$$(@) -c -Tp$$(<:\=/),;t t s,@COMPILE_RULES@,{$$(hdrdir)}.%s{}.%s: {$$(topdir)}.%s{}.%s: {$$(srcdir)}.%s{}.%s: .%s.%s:,;t t s,@RULE_SUBST@,{.;$$(VPATH)}%s,;t t s,@TRY_LINK@,$$(CC) -Feconftest $$(INCFLAGS) -I$$(hdrdir) $$(CPPFLAGS) $$(CFLAGS) $$(src) $$(LOCAL_LIBS) $$(LIBS) -link $$(LDFLAGS) $$(LIBPATH) $$(XLDFLAGS),;t t @@ -502,11 +504,12 @@ s,@configure_args@,--with-make-prog=nmake --enable-shared $(configure_args),;t t s,@configure_input@,$$configure_input,;t t s,@srcdir@,$(srcdir),;t t s,@top_srcdir@,$(srcdir),;t t -<