Hi, At Tue, 10 Jan 2006 10:25:35 +0900, Austin Ziegler wrote in [ruby-core:07086]: > > > It would be *nice* to be able to have the manifest stuff automatically > > > applied to the .so files as well, just in case, but since they depend > > > on Ruby or the msvcr80-ruby18.dll (which *does* have the manifest > > > applied), that should be good enough. It's probably worth documenting > > > somewhere, though. > > Documentation for what, to whom, and how? > > Mmmm. I think embedders who want to use VS2005 or later to compile > Ruby and their programs. Still I'm not sure what to be documented. .manifest files won't created? According to [ruby-core:07064], it doesn't seem important for DLLs And I believe that a developer who want to compile an applications with VS2005 should of course know about .manifest, regardless embedding ruby.
Index: mkconfig.rb =================================================================== RCS file: /cvs/ruby/src/ruby/mkconfig.rb,v retrieving revision 1.42 diff -U2 -p -r1.42 mkconfig.rb --- mkconfig.rb 10 Nov 2005 23:21:52 -0000 1.42 +++ mkconfig.rb 10 Jan 2006 07:19:00 -0000 @@ -42,7 +42,8 @@ File.foreach "config.status" do |line| ptn = $1.sub(/\$\$/, '$').split(/,/) #' v_fast << " CONFIG[\"ruby_install_name\"] = \"" + "ruby".sub(/#{ptn[0]}/,ptn[1]) + "\"\n" - elsif /^s[%,]@(\w+)@[%,](.*)[%,]/ =~ line - name = $1 - val = $2 || "" + elsif /^s([%,])@(\w+)@\1(.*)\1/ =~ line + extend = $1 + name = $2 + val = $3 || "" next if /^(?:ac_.*|DEFS|configure_input)$/ =~ name next if /^\$\(ac_\w+\)$/ =~ val @@ -52,6 +53,7 @@ File.foreach "config.status" do |line| next if $so_name and /^RUBY_SO_NAME$/ =~ name val.gsub!(/ +(?!-)/, "=") if name == "configure_args" && /mswin32/ =~ RUBY_PLATFORM - v = " CONFIG[\"" + name + "\"] = " + - val.gsub(/\$(?:\$|\{?(\w+)\}?)/) {$1 ? "$(#{$1})" : $&}.dump + "\n" + val.gsub!(/\$(?:\$|\{?(\w+)\}?)/) {$1 ? "$(#{$1})" : $&} + val = /%/ =~ extend ? "\"#{val}\"" : val.dump + v = " CONFIG[\"#{name}\"] = #{val}\n" if fast[name] v_fast << v Index: lib/mkmf.rb =================================================================== RCS file: /cvs/ruby/src/ruby/lib/mkmf.rb,v retrieving revision 1.234 diff -U2 -p -r1.234 mkmf.rb --- lib/mkmf.rb 28 Nov 2005 00:20:32 -0000 1.234 +++ lib/mkmf.rb 10 Jan 2006 08:00:14 -0000 @@ -996,4 +996,9 @@ preload = #{$preload.join(" ") if $prelo end end + config_string('SYSDEP_CONFS') do |s| + for x in s.split + config_string(x) {|s| mk << "#{x} = #{s}\n"} + end + end mk end @@ -1182,12 +1187,12 @@ site-install-rb: install-rb mfile.print "$(RUBYARCHDIR)/" if $extout - mfile.print "$(DLLIB): ", (makedef ? "$(DEFFILE) " : ""), "$(OBJS)\n\t" - mfile.print "@-$(RM) $@\n\t" - mfile.print "@-$(MAKEDIRS) $(@D)\n\t" if $extout + mfile.print "$(DLLIB): ", (makedef ? "$(DEFFILE) " : ""), "$(OBJS)\n" + mfile.print "\t@-$(RM) $@\n" + mfile.print "\t@-$(MAKEDIRS) $(@D)\n" if $extout link_so = LINK_SO if srcs.any?(&%r"\.(?:#{CXX_EXT.join('|')})\z".method(:===)) link_so = link_so.sub(/\bLDSHARED\b/, '\&XX') end - mfile.print link_so, "\n\n" + mfile.print link_so.gsub(/^\s*/, "\t"), "\n\n" unless $static.nil? mfile.print "$(STATIC_LIB): $(OBJS)\n\t" Index: win32/Makefile.sub =================================================================== RCS file: /cvs/ruby/src/ruby/win32/Makefile.sub,v retrieving revision 1.107 diff -U2 -p -r1.107 Makefile.sub --- win32/Makefile.sub 9 Jan 2006 05:26:58 -0000 1.107 +++ win32/Makefile.sub 10 Jan 2006 08:06:44 -0000 @@ -130,5 +130,8 @@ CXXFLAGS = $(CFLAGS) !endif !if !defined(LDFLAGS) -LDFLAGS = -link -incremental:no -debug -opt:ref -opt:icf +LDFLAGS = -link -incremental:no -opt:ref -opt:icf +!if $(MSC_VER) < 1400 +LDFLAGS = $(LDFLAGS) -debug +!endif !endif !if !defined(XLDFLAGS) @@ -148,4 +151,5 @@ CC = $(CC) -nologo LD = $(CC) LDSHARED = $(LD) -LD +LINK_SO = $$(LDSHARED) -Fe$$(@) $$(OBJS) $$(LIBS) $$(LOCAL_LIBS) $$(DLDFLAGS) XCFLAGS = -DRUBY_EXPORT -I. -I$(srcdir) -I$(srcdir)/missing !if $(MSC_VER) >= 1400 @@ -157,4 +161,12 @@ DLDFLAGS = $(LDFLAGS) -dll SOLIBS = +!if $(MSC_VER) >= 1400 +MANIFESTTOOL = mt -nologo +EMBED_MANIFEST_EXE = $(MANIFESTTOOL) -manifest $@.manifest -outputresource:$@;1 +EMBED_MANIFEST_DLL = $(MANIFESTTOOL) -manifest $@.manifest -outputresource:$@;2 +LINK_SO = $(LINK_SO)\n$$(EMBED_MANIFEST_DLL)\n@$$(RM) $$(@).manifest +sysdep_confs = $(sysdep_confs) MANIFESTTOOL EMBED_MANIFEST_EXE EMBED_MANIFEST_DLL +!endif + LIBRUBY_LDSHARED = $(LDSHARED) LIBRUBY_DLDFLAGS = $(EXTLDFLAGS) -def:$(RUBYDEF) @@ -214,5 +226,5 @@ $(CONFIG_H): $(MKFILES) $(srcdir)/win32/ @$(srcdir:/=\)\win32\ifchange.bat config.h << #if _MSC_VER != $(MSC_VER) -#error MSC version unmatch +#error MSC version unmatch: configured for $(MSC_VER) #endif #define STDC_HEADERS 1 @@ -429,5 +441,12 @@ 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 +!if defined(EMBED_MANIFEST_DLL) +s,@MANIFESTTOOL@,$(MANIFESTTOOL),;t t +s,@EMBED_MANIFEST_EXE@,$$(MANIFESTTOOL) -manifest $$(@).manifest -outputresource:$$(@);1,;t t +s,@EMBED_MANIFEST_DLL@,$$(MANIFESTTOOL) -manifest $$(@).manifest -outputresource:$$(@);2,;t t +s%@LINK_SO@%$(LINK_SO:$@=$$@)%;t t +!else +s,@LINK_SO@,$(LINK_SO),;t t +!endif s,@COMPILE_C@,$$(CC) $$(CFLAGS) $$(CPPFLAGS) -c -Tc$$(<:\=/),;t t s,@COMPILE_CXX@,$$(CXX) $$(CXXFLAGS) $$(CPPFLAGS) -c -Tp$$(<:\=/),;t t @@ -447,4 +466,5 @@ s,@configure_input@,$$configure_input,;t s,@srcdir@,$(srcdir),;t t s,@top_srcdir@,$(srcdir),;t t +s,@SYSDEP_CONFS@,$(sysdep_confs),;t t <<KEEP @@ -452,8 +472,10 @@ miniruby$(EXEEXT): @echo. $(LIBS) $(PURIFY) $(CC) $(MAINOBJ) $(MINIOBJS) $(LIBRUBY_A) $(LIBS) -Fe$@ $(LDFLAGS) + $(EMBED_MANIFEST_EXE) $(PROGRAM): $(LIBRUBY_SO) $(RUBY_INSTALL_NAME).res $(PURIFY) $(CC) $(MAINOBJ) $(RUBY_INSTALL_NAME).res \ $(OUTFLAG)$@ $(LIBRUBYARG) $(LDFLAGS) $(XLDFLAGS) + $(EMBED_MANIFEST_EXE) $(WPROGRAM): $(MAINOBJ) $(WINMAINOBJ) $(LIBRUBY_SO) $(RUBYW_INSTALL_NAME).res @@ -461,4 +483,5 @@ $(WPROGRAM): $(MAINOBJ) $(WINMAINOBJ) $( $(RUBYW_INSTALL_NAME).res $(OUTFLAG)$@ $(LIBRUBYARG) \ $(LDFLAGS) $(XLDFLAGS) -subsystem:Windows + $(EMBED_MANIFEST_EXE) $(LIBRUBY_A): $(OBJS) $(DMYEXT) @@ -473,4 +496,5 @@ $(LIBRUBY_SO): $(LIBRUBY_A) $(DLDOBJS) $ $(RUBY_SO_NAME).res $(LIBS) -Fe$@ $(LDFLAGS) \ $(LIBRUBY_DLDFLAGS) + $(EMBED_MANIFEST_DLL) $(RUBYDEF): $(LIBRUBY_A) $(PREP)
-- Nobu Nakada