Problem with mkmf-gnome2.rb in 0.17.0-rc1

When trying to use my extconf.rb, with content:

-=-=----=-=----=-=----=-=----=-=—
=begin
extconf.rb for booh lib additions
=end

PACKAGE_NAME = “booh/libadds”

#- some adds to Gdk::Pixbuf
require ‘mkmf-gnome2’
PKGConfig.have_package(‘gtk±2.0’) or exit 1
have_func(“gdk_pixbuf_set_option”)
have_header(“gdk-pixbuf/gdk-pixbuf-io.h”)

#- direct exiv2 access for some EXIF stuff
PKGConfig.have_package(‘exiv2’) or exit 1

#- does it do something good, actually?
setup_win32(PACKAGE_NAME)

create_makefile_at_srcdir(PACKAGE_NAME, ‘.’)
-=-=----=-=----=-=----=-=----=-=—

and mkmf-gnome2.rb, the following output is produced:

-=-=—=-=—=-=—=-=—=-=—=-=–
checking for GCC… yes
checking for rb_define_alloc_func() in ruby.h… yes
checking for rb_block_proc() in ruby.h… yes
checking for new allocation framework… yes
checking for attribute assignment… yes
checking for gtk±2.0… yes
checking for gdk_pixbuf_set_option()… yes
checking for gdk-pixbuf/gdk-pixbuf-io.h… yes
checking for exiv2… yes
checking for G_PLATFORM_WIN32… no
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers. Check the mkmf.log file for more
details. You may need configuration options.

Provided configuration options:
–with-opt-dir
–without-opt-dir
–with-opt-include
–without-opt-include=${opt-dir}/include
–with-opt-lib
–without-opt-lib=${opt-dir}/lib
–with-make-prog
–without-make-prog
–srcdir=.
–curdir
–ruby=/usr/bin/ruby
–with-pkg-config
–without-pkg-config
/usr/lib/ruby/site_ruby/1.8/mkmf-gnome2.rb:141:in
create_makefile_at_srcdir': undefined method +’ for nil:NilClass
(NoMethodError)
from extconf.rb:19
-=-=—=-=—=-=—=-=—=-=—=-=–

Instrumenting before the line 141, I can see that “srcdir” is “.” and
“base_dir” is “ext”, which effectively doesn’t give an apprently
awaited result to “srcdir.rindex(base_dir)” (my extconf.rb is in the
subdirectory “ext” of my project). I don’t know exactly what the code
is trying to do, so I cannot suggest a fix, sorry. Reverting commit
2504 workarounds the problem though.


Guillaume C. - http://zarb.org/~gc/

Hi,

2008/6/22 Guillaume C. [email protected]:

is trying to do, so I cannot suggest a fix, sorry. Reverting commit
2504 workarounds the problem though.

What about the following patch?Index: src/lib/mkmf-gnome2.rb

— src/lib/mkmf-gnome2.rb (revision 3256)
+++ src/lib/mkmf-gnome2.rb (working copy)
@@ -138,7 +138,10 @@

def create_makefile_at_srcdir(pkg_name, srcdir, defs = nil)
base_dir = File.basename(Dir.pwd)

  • builddir = srcdir[(srcdir.rindex(base_dir) + base_dir.size + 1)…-1]
  • last_common_index = srcdir.rindex(base_dir)
  • if last_common_index
  • builddir = srcdir[(last_common_index + base_dir.size + 1)…-1]
  • end
    builddir ||= “.”
    FileUtils.mkdir_p(builddir)

And your extconf.rb should use File.dirname(FILE) instead of “.”
to support building your .so in other (not source) directory:

diff --git a/ext/extconf.rb b/ext/extconf.rb
index 785e552…a591f1b 100644
— a/ext/extconf.rb
+++ b/ext/extconf.rb
@@ -16,4 +16,4 @@ PKGConfig.have_package(‘exiv2’) or exit 1
#- does it do something good, actually?
setup_win32(PACKAGE_NAME)

-create_makefile_at_srcdir(PACKAGE_NAME, ‘.’)
+create_makefile_at_srcdir(PACKAGE_NAME, File.dirname(FILE))

Thanks,

kou

  • if last_common_index
  • builddir = srcdir[(last_common_index + base_dir.size + 1)…-1]
  • end
    builddir ||= “.”
    FileUtils.mkdir_p(builddir)

Works better, thanks.

And your extconf.rb should use File.dirname(FILE) instead of “.”
to support building your .so in other (not source) directory:

thanks!


Guillaume C. - Guillaume Cottenceau