ruby-core@ruby-lang.org archive (unofficial mirror)
 help / color / mirror / Atom feed
From: eregontp@gmail.com
To: ruby-core@ruby-lang.org
Subject: [ruby-core:81199] [Ruby trunk Feature#13570] Using mkmf for ruby/spec C API specs
Date: Tue, 16 May 2017 12:47:46 +0000	[thread overview]
Message-ID: <redmine.issue-13570.20170516124746.bcdb161dba6fca67@ruby-lang.org> (raw)
In-Reply-To: redmine.issue-13570.20170516124746@ruby-lang.org

Issue #13570 has been reported by Eregon (Benoit Daloze).

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

* Author: Eregon (Benoit Daloze)
* Status: Open
* Priority: Normal
* Assignee: 
* 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.



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

       reply	other threads:[~2017-05-16 12:02 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 ` eregontp [this message]
2017-05-16 21:11 ` [ruby-core:81200] [Ruby trunk Feature#13570] Using mkmf for ruby/spec C API specs 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 ` [ruby-core:81490] " Greg.mpls
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.issue-13570.20170516124746.bcdb161dba6fca67@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).