ruby-core@ruby-lang.org archive (unofficial mirror)
 help / color / mirror / Atom feed
From: Greg.mpls@gmail.com
To: ruby-core@ruby-lang.org
Subject: [ruby-core:81490] [Ruby trunk Feature#13570] Using mkmf for ruby/spec C API specs
Date: Wed, 31 May 2017 22:25:41 +0000	[thread overview]
Message-ID: <redmine.journal-65198.20170531222540.3f94d8224e289faf@ruby-lang.org> (raw)
In-Reply-To: redmine.issue-13570.20170516124746@ruby-lang.org

Issue #13570 has been updated by MSP-Greg (Greg L).


Benoit,

After screwing around with quite a bit of make code, I found the (simple) issue. The code in [Object.cp](https://github.com/ruby/ruby/blob/trunk/spec/mspec/lib/mspec/helpers/fs.rb#L3-L11) does not properly copy binary files on Windows.

Hence, since we know the `src` and `dest` are on the same partition/drive, I used `File.rename` in `spec_helper.rb`.  Below is a diff/patch file:

```diff
--- spec_helper_orig.rb	Mon May 29 13:34:22 2017
+++ spec_helper.rb	Wed May 31 15:47:17 2017
@@ -18,11 +18,7 @@
 
 def compile_extension(name)
   debug = false
-  run_mkmf_in_process = false
-
-  if RUBY_NAME == 'truffleruby'
-    run_mkmf_in_process = true
-  end
+  run_mkmf_in_process = RUBY_NAME == 'truffleruby'
 
   ext = "#{name}_spec"
   lib = "#{object_path}/#{ext}.#{RbConfig::CONFIG['DLEXT']}"
@@ -61,7 +57,7 @@
       raise "make failed:\n#{output}" unless $?.success?
       $stderr.puts output if debug
 
-      cp File.basename(lib), lib
+      File.rename File.basename(lib), lib
     end
   ensure
     rm_r tmpdir unless debug

```

Tests run with `-j` both via `make test-spec` and running `mspec`.  Results of both are at [Ruby MinGW Test Results](https://msp-greg.github.io/file.mingw_test-all.html#test-spec-Failure-Error-Summary).

Thanks for the work.

----------------------------------------
Feature #13570: Using mkmf for ruby/spec C API specs
https://bugs.ruby-lang.org/issues/13570#change-65198

* Author: Eregon (Benoit Daloze)
* Status: Assigned
* Priority: Normal
* Assignee: cruby-windows
* Target version: 
----------------------------------------
Hello all,

I am thinking to use mkmf to compile the C API specs.

https://github.com/ruby/ruby/blob/trunk/spec/rubyspec/optional/capi/spec_helper.rb
is getting pretty complex and hard to maintain.

I have a few questions:
* Does mkmf works well on Windows?
* What is a good way to compile a single .c file with mkmf to a given library file in another directory?

I tried this but I am not sure it's correct:

~~~ ruby
def compile_extension(name)
  objdir = object_path
  ext = "#{name}_spec"
  lib = "#{objdir}/#{ext}.#{RbConfig::CONFIG['DLEXT']}"

  require 'mkmf' # TODO: probably best to use a subprocess to avoid polluting the namespace
  Dir.chdir(objdir) do
    $srcs = ["#{extension_path}/#{ext}.c"]
    $objs = ["#{extension_path}/#{ext}.o"] # should probably be in objdir but that does not seem to work
    create_makefile(ext)
    system "make"
  end

  lib
end
~~~

Alternatively, we can copy the needed files to a temporary directory, build there and copy the shared library back.
It's a bit more work but not a big deal either.

---Files--------------------------------
spec_helper.rb (2.22 KB)


-- 
https://bugs.ruby-lang.org/

  parent reply	other threads:[~2017-05-31 22:25 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <redmine.issue-13570.20170516124746@ruby-lang.org>
2017-05-16 12:47 ` [ruby-core:81199] [Ruby trunk Feature#13570] Using mkmf for ruby/spec C API specs eregontp
2017-05-16 21:11 ` [ruby-core:81200] " Greg.mpls
2017-05-28 11:38 ` [ruby-core:81434] [Ruby trunk Feature#13570][Closed] " eregontp
2017-05-29 15:33 ` [ruby-core:81455] [Ruby trunk Feature#13570] " eregontp
2017-05-29 15:33 ` [ruby-core:81456] [Ruby trunk Feature#13570][Assigned] " eregontp
2017-05-29 16:39 ` [ruby-core:81458] [Ruby trunk Feature#13570] " Greg.mpls
2017-05-31 22:25 ` Greg.mpls [this message]
2017-06-01 16:21 ` [ruby-core:81510] " eregontp
2017-06-01 16:44 ` [ruby-core:81511] " Greg.mpls
2017-06-01 19:08 ` [ruby-core:81513] " eregontp
2017-06-02  2:00 ` [ruby-core:81517] " nobu
2017-06-02  9:09 ` [ruby-core:81520] " eregontp
2017-06-02  9:15 ` [ruby-core:81521] " eregontp
2017-06-02 13:16 ` [ruby-core:81524] " Greg.mpls
2017-06-02 14:33 ` [ruby-core:81527] " Greg.mpls
2017-06-02 19:26 ` [ruby-core:81538] " Greg.mpls
2017-06-05  6:13 ` [ruby-core:81575] " usa
2017-06-05  8:03 ` [ruby-core:81576] " nobu
2017-06-05 16:32 ` [ruby-core:81582] " Greg.mpls
2017-06-15 13:51 ` [ruby-core:81693] " eregontp
2018-12-28 19:04 ` [ruby-core:90779] " eregontp

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.ruby-lang.org/en/community/mailing-lists/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=redmine.journal-65198.20170531222540.3f94d8224e289faf@ruby-lang.org \
    --to=ruby-core@ruby-lang.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).