From: Jeffrey 'jf' Lim Date: 2014-07-31T23:44:32+08:00 Subject: [ruby-core:64142] Re: Ruby 2.1.2 (and 2.1.1 and probably others) assumes a libffi with 3 version numbers in extconf.rb --047d7b86d66c1b603704ff7f264c Content-Type: text/plain; charset=ISO-8859-1 On Thu, Jul 31, 2014 at 6:09 PM, Jeffrey 'jf' Lim wrote: > On Thu, Jul 31, 2014 at 6:03 PM, Jeffrey 'jf' Lim > wrote: > >> As per subject. >> >> If you have the latest libffi version (3.1) installed, fiddle wont be >> configured. >> >> The offending section in extconf.rb: >> ======== >> 7 pkg_config("libffi") >> 8 if ver = pkg_config("libffi", "modversion") >> 9 ver = ver.gsub(/-rc\d+/, '') # If ver contains rc version, just >> ignored. >> 10 $defs.push(%{-DRUBY_LIBFFI_MODVERSION=#{ '%d%03d' % ver.split('.') >> }}) >> 11 end >> ======== >> >> I'm not too sure what the idiomatic approach would be; how about the >> following? >> >> =============== >> --- ext/fiddle/extconf.rb.orig 2013-05-19 10:42:16.000000000 +0800 >> +++ ext/fiddle/extconf.rb 2014-07-31 18:00:47.000000000 +0800 >> @@ -7,7 +7,8 @@ >> pkg_config("libffi") >> if ver = pkg_config("libffi", "modversion") >> ver = ver.gsub(/-rc\d+/, '') # If ver contains rc version, just >> ignored. >> - $defs.push(%{-DRUBY_LIBFFI_MODVERSION=#{ '%d%03d%03d' % ver.split('.') >> }}) >> + ver_split = ver.split('.') >> + $defs.push(%{-DRUBY_LIBFFI_MODVERSION=#{ ('%d' + >> '%03d'*(versplit.length-1)) % versplit }}) >> end >> >> unless have_header('ffi.h') >> ================= >> >> > > or indeed the "correct" way? Do we use/assume "3.1.0" for "3.1" instead, > for example? > > ok, sorry my bad. Indeed it does (ext/fiddle/closure.c to be precise!) depends on RUBY_LIBFFI_MODVERSION being generated off of a 3-digit 'ver'). So the correct patch should this instead: ========== --- ext/fiddle/extconf.rb.orig 2013-05-19 10:42:16.000000000 +0800 +++ ext/fiddle/extconf.rb 2014-07-31 23:39:34.000000000 +0800 @@ -7,7 +7,9 @@ pkg_config("libffi") if ver = pkg_config("libffi", "modversion") ver = ver.gsub(/-rc\d+/, '') # If ver contains rc version, just ignored. - $defs.push(%{-DRUBY_LIBFFI_MODVERSION=#{ '%d%03d%03d' % ver.split('.') }}) + ver_split = ver.split('.') + ver_split.push '0' if ver_split.length == 2 + $defs.push(%{-DRUBY_LIBFFI_MODVERSION=#{ '%d%03d%03d' % ver_split }}) end unless have_header('ffi.h') =========== thanks, -jf --047d7b86d66c1b603704ff7f264c Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable
On Thu, Jul 31, 2014 at 6:09 PM, Jeffrey 'jf' Lim = <jfs.world@gmail.com> wrote:
On Thu, Jul 31, 2014 at 6:03 PM, Jeffrey 'jf' Lim <jfs.world@gmail.com> wrote:
=
As per subject.

If you have the latest libffi version (3.= 1) installed, fiddle wont be configured.

The offending section in extconf.rb:
=3D=3D=3D=3D=3D=3D=3D=3D<= br>=A0 7 pkg_config("libffi")
=A0 8 if ver =3D pkg_config("libffi", "modversion")
= =A0 9=A0=A0 ver =3D ver.gsub(/-rc\d+/, '') # If ver contains rc ver= sion, just ignored.
=A010=A0=A0 $defs.push(%{-DRUBY_LIBFFI_MODVERSION=3D= #{ '%d%03d' % ver.split('.') }})
=A011 end
=3D=3D=3D=3D=3D=3D=3D=3D

I'm not too sur= e what the idiomatic approach would be; how about the following?

=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- ext/fiddle/extconf.rb.ori= g=A0=A0=A0 2013-05-19 10:42:16.000000000 +0800
+++ ext/fiddle/extconf.rb=A0=A0=A0 2014-07-31 18:00:47.000000000 +0800
@= @ -7,7 +7,8 @@
=A0pkg_config("libffi")
=A0if ver =3D pkg_co= nfig("libffi", "modversion")
=A0=A0 ver =3D ver.gsub= (/-rc\d+/, '') # If ver contains rc version, just ignored.
-=A0 $defs.push(%{-DRUBY_LIBFFI_MODVERSION=3D#{ '%d%03d%03d' % ver.= split('.') }})
+=A0 ver_split =3D ver.split('.')
+=A0= $defs.push(%{-DRUBY_LIBFFI_MODVERSION=3D#{ ('%d' + '%03d'*= (versplit.length-1)) % versplit }})
=A0end
=A0
=A0unless have_header('ffi.h')
=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
=A0

or indeed the "correct= " way? Do we use/assume "3.1.0" for "3.1" instead,= for example?


= ok, sorry my bad. Indeed it does (ext/fiddle/closure.c to be precise!) depe= nds on RUBY_LIBFFI_MODVERSION being generated off of a 3-digit 'ver'= ;). So the correct patch should this instead:

=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- ext/fiddle/extconf.rb.orig=A0=A0= =A0 2013-05-19 10:42:16.000000000 +0800
+++ ext/fiddle/extconf.rb=A0=A0= =A0 2014-07-31 23:39:34.000000000 +0800
@@ -7,7 +7,9 @@
=A0pkg_config= ("libffi")
=A0if ver =3D pkg_config("libffi", "= modversion")
=A0=A0 ver =3D ver.gsub(/-rc\d+/, '') # If ver contains rc version,= just ignored.
-=A0 $defs.push(%{-DRUBY_LIBFFI_MODVERSION=3D#{ '%d%0= 3d%03d' % ver.split('.') }})
+=A0 ver_split =3D ver.split(&#= 39;.')
+=A0 ver_split.push '0' if ver_split.length =3D=3D 2
+=A0 $defs.= push(%{-DRUBY_LIBFFI_MODVERSION=3D#{ '%d%03d%03d' % ver_split }})=A0end
=A0
=A0unless have_header('ffi.h')
=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D

thanks,
-jf


--047d7b86d66c1b603704ff7f264c--