[前][次][番号順一覧][スレッド一覧]

ruby-changes:46824

From: eregon <ko1@a...>
Date: Sun, 28 May 2017 20:30:48 +0900 (JST)
Subject: [ruby-changes:46824] eregon:r58939 (trunk): Update to ruby/spec@2a047c8

eregon	2017-05-28 20:30:42 +0900 (Sun, 28 May 2017)

  New Revision: 58939

  https://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=58939

  Log:
    Update to ruby/spec@2a047c8

  Modified files:
    trunk/spec/rubyspec/optional/capi/module_spec.rb
    trunk/spec/rubyspec/optional/capi/spec_helper.rb
Index: spec/rubyspec/optional/capi/module_spec.rb
===================================================================
--- spec/rubyspec/optional/capi/module_spec.rb	(revision 58938)
+++ spec/rubyspec/optional/capi/module_spec.rb	(revision 58939)
@@ -62,16 +62,18 @@ describe "CApiModule" do https://github.com/ruby/ruby/blob/trunk/spec/rubyspec/optional/capi/module_spec.rb#L62
       mod = @m.rb_define_module_under(CApiModuleSpecs, "ModuleSpecsModuleUnder2")
       mod.name.should == "CApiModuleSpecs::ModuleSpecsModuleUnder2"
     end
+  end
 
-    it "defines a module for an existing Autoload with an extension" do
+  describe "rb_define_module_under" do
+    before :each do
       compile_extension("module_under_autoload")
+    end
 
+    it "defines a module for an existing Autoload with an extension" do
       CApiModuleSpecs::ModuleUnderAutoload.name.should == "CApiModuleSpecs::ModuleUnderAutoload"
     end
 
     it "defines a module for an existing Autoload with a ruby object" do
-      compile_extension("module_under_autoload")
-
       CApiModuleSpecs::RubyUnderAutoload.name.should == "CApiModuleSpecs::RubyUnderAutoload"
     end
   end
Index: spec/rubyspec/optional/capi/spec_helper.rb
===================================================================
--- spec/rubyspec/optional/capi/spec_helper.rb	(revision 58938)
+++ spec/rubyspec/optional/capi/spec_helper.rb	(revision 58939)
@@ -1,5 +1,4 @@ https://github.com/ruby/ruby/blob/trunk/spec/rubyspec/optional/capi/spec_helper.rb#L1
 require File.expand_path('../../../spec_helper', __FILE__)
-$extmk = false
 
 require 'rbconfig'
 
@@ -15,130 +14,59 @@ def object_path https://github.com/ruby/ruby/blob/trunk/spec/rubyspec/optional/capi/spec_helper.rb#L14
 end
 
 def compile_extension(name)
-  preloadenv = RbConfig::CONFIG["PRELOADENV"] || "LD_PRELOAD"
-  preload, ENV[preloadenv] = ENV[preloadenv], nil if preloadenv
+  debug = false
+  run_mkmf_in_process = false
 
-  path = extension_path
-  objdir = object_path
-
-  # TODO use rakelib/ext_helper.rb?
-  arch_hdrdir = nil
-
-  if RUBY_NAME == 'rbx'
-    hdrdir = RbConfig::CONFIG["rubyhdrdir"]
-  elsif RUBY_NAME =~ /^ruby/
-    hdrdir = RbConfig::CONFIG["rubyhdrdir"]
-    arch_hdrdir = RbConfig::CONFIG["rubyarchhdrdir"]
-  elsif RUBY_NAME == 'jruby'
-    require 'mkmf'
-    hdrdir = $hdrdir
-  elsif RUBY_NAME == "maglev"
-    require 'mkmf'
-    hdrdir = $hdrdir
-  elsif RUBY_NAME == 'truffleruby'
-    return compile_truffleruby_extconf_make(name, path, objdir)
-  else
-    raise "Don't know how to build C extensions with #{RUBY_NAME}"
+  if RUBY_NAME == 'truffleruby'
+    run_mkmf_in_process = true
   end
 
-  ext       = "#{name}_spec"
-  source    = File.join(path, "#{ext}.c")
-  obj       = File.join(objdir, "#{ext}.#{RbConfig::CONFIG['OBJEXT']}")
-  lib       = File.join(objdir, "#{ext}.#{RbConfig::CONFIG['DLEXT']}")
-
-  ruby_header     = File.join(hdrdir, "ruby.h")
-  rubyspec_header = File.join(path, "rubyspec.h")
+  ext = "#{name}_spec"
+  source = "#{extension_path}/#{ext}.c"
+  lib = "#{object_path}/#{ext}.#{RbConfig::CONFIG['DLEXT']}"
+  ruby_header = "#{RbConfig::CONFIG['rubyhdrdir']}/ruby.h"
 
-  return lib if File.exist?(lib) and File.mtime(lib) > File.mtime(source) and
+  return lib if File.exist?(lib) and
+                File.mtime(lib) > File.mtime(source) and
                 File.mtime(lib) > File.mtime(ruby_header) and
-                File.mtime(lib) > File.mtime(rubyspec_header) and
+                File.mtime(lib) > File.mtime("#{extension_path}/rubyspec.h") and
                 true            # sentinel
 
-  # avoid problems where compilation failed but previous shlib exists
-  File.delete lib if File.exist? lib
-
-  cc        = RbConfig::CONFIG["CC"]
-  cflags    = (ENV["CFLAGS"] || RbConfig::CONFIG["CFLAGS"]).dup
-  cflags   += " #{RbConfig::CONFIG["ARCH_FLAG"]}" if RbConfig::CONFIG["ARCH_FLAG"]
-  cflags   += " #{RbConfig::CONFIG["CCDLFLAGS"]}" if RbConfig::CONFIG["CCDLFLAGS"]
-  cppflags  = (ENV["CPPFLAGS"] || RbConfig::CONFIG["CPPFLAGS"]).dup
-  incflags  = "-I#{path}"
-  incflags << " -I#{arch_hdrdir}" if arch_hdrdir
-  incflags << " -I#{hdrdir}"
-  csrcflag  = RbConfig::CONFIG["CSRCFLAG"]
-  coutflag  = RbConfig::CONFIG["COUTFLAG"]
-
-  compile_cmd = "#{cc} #{incflags} #{cflags} #{cppflags} #{coutflag}#{obj} -c #{csrcflag}#{source}"
-  output = `#{compile_cmd}`
-
-  unless $?.success? and File.exist?(obj)
-    puts "\nERROR:\n#{compile_cmd}\n#{output}"
-    puts "incflags=#{incflags}"
-    puts "cflags=#{cflags}"
-    puts "cppflags=#{cppflags}"
-    raise "Unable to compile \"#{source}\""
-  end
-
-  ldshared  = RbConfig::CONFIG["LDSHARED"]
-  ldshared += " #{RbConfig::CONFIG["ARCH_FLAG"]}" if RbConfig::CONFIG["ARCH_FLAG"]
-  libs      = RbConfig::CONFIG["LIBS"]
-  dldflags  = "#{RbConfig::CONFIG["LDFLAGS"]} #{RbConfig::CONFIG["DLDFLAGS"]} #{RbConfig::CONFIG["EXTDLDFLAGS"]}"
-  dldflags.sub!(/-Wl,-soname,\S+/, '')
-
-  if /mswin/ =~ RUBY_PLATFORM
-    dldflags.sub!("$(LIBPATH)", RbConfig::CONFIG["LIBPATHFLAG"] % path)
-    libs    += RbConfig::CONFIG["LIBRUBY"]
-    outflag  = RbConfig::CONFIG["OUTFLAG"]
-
-    link_cmd = "#{ldshared} #{outflag}#{lib} #{obj} #{libs} -link #{dldflags} /export:Init_#{ext}"
-  else
-    libpath   = "-L#{path}"
-    dldflags.sub!("$(TARGET_ENTRY)", "Init_#{ext}")
-
-    link_cmd = "#{ldshared} #{obj} #{libpath} #{dldflags} #{libs} -o #{lib}"
-  end
-  output = `#{link_cmd}`
-
-  unless $?.success?
-    puts "\nERROR:\n#{link_cmd}\n#{output}"
-    raise "Unable to link \"#{source}\""
-  end
-
-  lib
-ensure
-  ENV[preloadenv] = preload if preloadenv
-end
-
-def compile_truffleruby_extconf_make(name, path, objdir)
-  ext = "#{name}_spec"
-  file = "#{ext}.c"
-  source = "#{path}/#{ext}.c"
-  lib = "#{objdir}/#{ext}.#{RbConfig::CONFIG['DLEXT']}"
-
   # Copy needed source files to tmpdir
   tmpdir = tmp("cext_#{name}")
-  Dir.mkdir tmpdir
+  Dir.mkdir(tmpdir)
   begin
-    ["rubyspec.h", "truffleruby.h", "#{ext}.c"].each do |file|
-      cp "#{path}/#{file}", "#{tmpdir}/#{file}"
+    ["jruby.h", "rubinius.h", "truffleruby.h", "rubyspec.h", "#{ext}.c"].each do |file|
+      cp "#{extension_path}/#{file}", "#{tmpdir}/#{file}"
     end
 
     Dir.chdir(tmpdir) do
-      required = require 'mkmf'
-      # Reinitialize mkmf if already required
-      init_mkmf unless required
-      create_makefile(ext, tmpdir)
-      system "make"
-
-      copy_exts = RbConfig::CONFIG.values_at('OBJEXT', 'DLEXT')
-      Dir.glob("*.{#{copy_exts.join(',')}}") do |file|
-        cp file, "#{objdir}/#{file}"
+      if run_mkmf_in_process
+        required = require 'mkmf'
+        # Reinitialize mkmf if already required
+        init_mkmf unless required
+        create_makefile(ext, tmpdir)
+      else
+        File.write("extconf.rb", "require 'mkmf'\n" +
+          "create_makefile(#{ext.inspect})\n")
+        output = ruby_exe("extconf.rb")
+        raise "extconf failed:\n#{output}" unless $?.success?
+        $stderr.puts output if debug
+      end
+
+      output = `make V=1 TARGET_SO_DIR=./`
+      raise "make failed:\n#{output}" unless $?.success?
+      $stderr.puts output if debug
+
+      Dir.glob("*.#{RbConfig::CONFIG['DLEXT']}") do |file|
+        cp file, "#{object_path}/#{file}"
       end
     end
   ensure
     rm_r tmpdir
   end
 
+  File.chmod(0755, lib)
   lib
 end
 

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]