Bug #13069 » mkmf.patch
| lib/mkmf.rb | ||
|---|---|---|
|     RbConfig::expand(TRY_LINK.dup, conf) | ||
|   end | ||
|   def link_shared_command(ldflags, opt="", libpath=$DEFLIBPATH|$LIBPATH) | ||
|     librubyarg = $extmk ? $LIBRUBYARG_SHARED : "$(LIBRUBYARG_SHARED)" | ||
|     conf = RbConfig::CONFIG.merge('hdrdir' => $hdrdir.quote, | ||
|                                   'src' => "#{CONFTEST_C}", | ||
|                                   'arch_hdrdir' => $arch_hdrdir.quote, | ||
|                                   'top_srcdir' => $top_srcdir.quote, | ||
|                                   'INCFLAGS' => "#$INCFLAGS", | ||
|                                   'CPPFLAGS' => "#$CPPFLAGS", | ||
|                                   'CFLAGS' => "#{CONFIG['CCDLFLAGS']} #$CFLAGS", | ||
|                                   'ARCH_FLAG' => "#$ARCH_FLAG", | ||
|                                   'DLDFLAGS' => "#$DLDFLAGS #{CONFIG['EXTDLDFLAGS']} #{ldflags}", | ||
|                                   'LOCAL_LIBS' => "#$LOCAL_LIBS #$libs", | ||
|                                   'LIBS' => "#{librubyarg} #{opt} #$LIBS") | ||
|     conf['LIBPATH'] = libpathflag(libpath.map {|s| RbConfig::expand(s.dup, conf)}) | ||
|     RbConfig::expand(TRY_LINK_SHARED.dup, conf) | ||
|   end | ||
|   def cc_command(opt="") | ||
|     conf = RbConfig::CONFIG.merge('hdrdir' => $hdrdir.quote, 'srcdir' => $srcdir.quote, | ||
|                                   'arch_hdrdir' => $arch_hdrdir.quote, | ||
| ... | ... | |
|     MakeMakefile.rm_rf(*Dir["#{CONFTEST}*"]-[exe]) | ||
|   end | ||
|   def try_link0_shared(src, opt="", *opts, &b) # :nodoc: | ||
|     so = "#{CONFTEST}.#{CONFIG['DLEXT']}" | ||
|     cmd = link_shared_command("", opt) | ||
|     if $universal | ||
|       require 'tmpdir' | ||
|       Dir.mktmpdir("mkmf_", oldtmpdir = ENV["TMPDIR"]) do |tmpdir| | ||
|         begin | ||
|           ENV["TMPDIR"] = tmpdir | ||
|           try_do(src, cmd, *opts, &b) | ||
|         ensure | ||
|           ENV["TMPDIR"] = oldtmpdir | ||
|         end | ||
|       end | ||
|     else | ||
|       try_do(src, cmd, *opts, &b) | ||
|     end and File.file?(so) or return nil | ||
|     so | ||
|   ensure | ||
|     MakeMakefile.rm_rf(*Dir["#{CONFTEST}*"]-[so]) | ||
|   end | ||
|   # Returns whether or not the +src+ can be compiled as a C source and linked | ||
|   # with its depending libraries successfully.  +opt+ is passed to the linker | ||
|   # as options. Note that +$CFLAGS+ and +$LDFLAGS+ are also passed to the | ||
| ... | ... | |
|   end | ||
|   def try_ldflags(flags, opts = {}) | ||
|     try_link(MAIN_DOES_NOTHING, flags, {:werror => true}.update(opts)) | ||
|     if CROSS_COMPILING | ||
|       try_link(MAIN_DOES_NOTHING, flags, {:werror => true}.update(opts)) | ||
|     elsif $static.nil? | ||
|       try_run_shared(<<SRC, flags) | ||
| #include "#{$hdrdir}/ruby.h" | ||
| /*top*/ | ||
| void Init_conftest(void) | ||
| { | ||
|   rb_define_global_const("MKMF_CONFTEST", INT2FIX(42)); | ||
| } | ||
| SRC | ||
|     else | ||
|       try_run(MAIN_DOES_NOTHING, flags) | ||
|     end | ||
|   end | ||
|   def append_ldflags(flags, *opts) | ||
| ... | ... | |
|     MakeMakefile.rm_f "#{CONFTEST}*" | ||
|   end | ||
|   def try_run_shared(src, opt = "", &b) # :nodoc: | ||
|     if CROSS_COMPILING | ||
|       raise "cannot run test shared library extension while cross compiling" | ||
|     end | ||
|     unless $static.nil? | ||
|       raise "cannot run test shared library extension with static link configuration" | ||
|     end | ||
|     if try_link0_shared(src, opt, &b) | ||
|       conftest = Shellwords.escape(File.absolute_path(CONFTEST)) | ||
|       xsystem(RbConfig::expand(%{#{$ruby} -r#{conftest}.$(DLEXT) -e "exit(MKMF_CONFTEST == 42)"})) | ||
|     else | ||
|       nil | ||
|     end | ||
|   ensure | ||
|     MakeMakefile.rm_f "#{CONFTEST}*" | ||
|   end | ||
|   def install_files(mfile, ifiles, map = nil, srcprefix = nil) | ||
|     ifiles or return | ||
|     ifiles.empty? and return | ||
| ... | ... | |
|     "$(CC) #{OUTFLAG}#{CONFTEST}#{$EXEEXT} $(INCFLAGS) $(CPPFLAGS) " \ | ||
|     "$(CFLAGS) $(src) $(LIBPATH) $(LDFLAGS) $(ARCH_FLAG) $(LOCAL_LIBS) $(LIBS)" | ||
|   TRY_LINK_SHARED = config_string('TRY_LINK_SHARED') || | ||
|     "$(LDSHARED) #{OUTFLAG}#{CONFTEST}.#{CONFIG['DLEXT']} $(INCFLAGS) $(CPPFLAGS) " \ | ||
|     "$(CFLAGS) $(src) $(LIBPATH) $(DLDFLAGS) $(ARCH_FLAG) $(LOCAL_LIBS) $(LIBS)" | ||
|   ## | ||
|   # Command which will link a shared library | ||
- « Previous
- 1
- 2
- Next »