[#31647] [Backport #3666] Backport of r26311 (Bug #2587) — Luis Lavena <redmine@...>

Backport #3666: Backport of r26311 (Bug #2587)

13 messages 2010/08/07

[#31666] [Bug #3677] unable to run certain gem binaries' in windows 7 — Roger Pack <redmine@...>

Bug #3677: unable to run certain gem binaries' in windows 7

10 messages 2010/08/10

[#31676] [Backport #3680] Splatting calls to_ary instead of to_a in some cases — Tomas Matousek <redmine@...>

Backport #3680: Splatting calls to_ary instead of to_a in some cases

10 messages 2010/08/11

[#31681] [Bug #3683] getgrnam on computer with NIS group (+)? — Rocky Bernstein <redmine@...>

Bug #3683: getgrnam on computer with NIS group (+)?

13 messages 2010/08/11

[#31843] Garbage Collection Question — Asher <asher@...>

This question is no doubt a function of my own lack of understanding, but I think that asking it will at least help some other folks see what's going on with the internals during garbage collection.

17 messages 2010/08/25
[#31861] Re: Garbage Collection Question — Roger Pack <rogerdpack2@...> 2010/08/26

> The question in short: when an object goes out of scope and has no

[#31862] Re: Garbage Collection Question — Asher <asher@...> 2010/08/26

Right - so how does a pointer ever get off the stack?

[#31873] Re: Garbage Collection Question — Kurt Stephens <ks@...> 2010/08/27

On 8/26/10 11:51 AM, Asher wrote:

[#31894] Re: Garbage Collection Question — Asher <asher@...> 2010/08/27

I very much appreciate the response, and this is helpful in describing the narrative, but it's still a few steps behind my question - but it may very well have clarified some points that help us get there.

[#31896] Re: Garbage Collection Question — Evan Phoenix <evan@...> 2010/08/27

You have introduced something called a "root node" without defining it. What do you mean by this?

[#31885] Avoiding $LOAD_PATH pollution — Eric Hodel <drbrain@...7.net>

Last year Nobu asked me to propose an API for adding an object to

21 messages 2010/08/27

[#31947] not use system for default encoding — Roger Pack <rogerdpack2@...>

It strikes me as a bit "scary" to use system locale settings to

19 messages 2010/08/30

[#31971] Change Ruby's License to BSDL + Ruby's dual license — "NARUSE, Yui" <naruse@...>

Ruby's License will change to BSDL + Ruby's dual license

16 messages 2010/08/31

[ruby-core:31585] Cross compilation, understanding fake.rb and mimic it

From: Luis Lavena <luislavena@...>
Date: 2010-08-01 20:36:36 UTC
List: ruby-core #31585
Hello,

In [ruby-core:31352] Roger Pack tried to understand why under certain
conditions extensions failed to export symbols properly.

After looking to Mr. Nobuyoshi Nakada example in that thread, the
usage of i386-mingw32-fake made it clear that the contents of that
file play an important role in the cross-compilation and the correct
generation of makefiles and extensions.

This affects rake-compiler projects, which strives to simplify OSX and
Linux gem developers providing binaries for Windows users.

http://github.com/luislavena/rake-compiler

After solving my cross-compilation issues with latest trunk and
ruby_1_9_2 branch, decided to investigate further how to solve the
issue and integrate in rake-compiler a solution that works once Ruby
1.9.2 gets out.

When created rake-compiler, I used to generate a simple fake script:

http://github.com/luislavena/rake-compiler/blob/master/lib/rake/extensiontask.rb#L365-372

class Object
  remove_const :RUBY_PLATFORM
  remove_const :RUBY_VERSION
  RUBY_PLATFORM = "i386-mingw32"
  RUBY_VERSION = "#{version}"
end

Which has proven to work perfectly with mkmf and Ruby 1.8 series.

Now with newer 1.9.x and the .def file, it seems this simple example
do not generate what is need:

$ cat fake.rb
class Object
  CROSS_COMPILING = RUBY_PLATFORM
  remove_const :RUBY_PLATFORM
  remove_const :RUBY_VERSION
  remove_const :RUBY_DESCRIPTION if defined?(RUBY_DESCRIPTION)
  RUBY_PLATFORM = "i386-mingw32"
  RUBY_VERSION = "1.9.2"
  RUBY_DESCRIPTION = "ruby #{RUBY_VERSION} (2010-08-02) [#{RUBY_PLATFORM}]"
end

$ cat extconf.rb
require 'mkmf'
create_makefile('testext')

$ ruby -r ./fake.rb extconf.rb

$ make
gcc -I. -I/home/luis/.rvm/rubies/ruby-1.9.2-head/include/ruby-1.9.1/i686-linux
-I/home/luis/.rvm/rubies/ruby-1.9.2-head/include/ruby-1.9.1/ruby/backward
-I/home/luis/.rvm/rubies/ruby-1.9.2-head/include/ruby-1.9.1 -I.
-D_FILE_OFFSET_BITS=64  -fPIC -O3 -ggdb -Wextra -Wno-unused-parameter
-Wno-parentheses -Wpointer-arith -Wwrite-strings
-Wno-missing-field-initializers -Wno-long-long  -fPIC  -o testext.o -c
testext.c
gcc -shared -o testext.so testext.o -L.
-L/home/luis/.rvm/rubies/ruby-1.9.2-head/lib
-Wl,-R/home/luis/.rvm/rubies/ruby-1.9.2-head/lib -L.  -rdynamic
-Wl,-export-dynamic   -Wl,-R
-Wl,/home/luis/.rvm/rubies/ruby-1.9.2-head/lib
-L/home/luis/.rvm/rubies/ruby-1.9.2-head/lib -lruby  -lpthread -lrt
-ldl -lcrypt -lm   -lc

$ file testext.so
testext.so: ELF 32-bit LSB shared object, Intel 80386, version 1
(SYSV), dynamically linked, not stripped

===

Comparing my naive implementation of fake with the real one:

http://gist.github.com/503737

It is clear that my previous trick will not work with newer versions
of Ruby (specifically mkmf), including the upcoming 1.9.2

With the goal of providing a working environment for all the extension
authors out there, I was wondering if there is any documentation I
should read to better understand the needed changes.

Thank you for your time.
-- 
Luis Lavena
AREA 17
-
Perfection in design is achieved not when there is nothing more to add,
but rather when there is nothing more to take away.
Antoine de Saint-Exup駻y

In This Thread

Prev Next