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 »