さかいといいます。

From: "Akinori MUSHA" <knu / iDaemons.org>
Subject: [ruby-list:38099] Re: [ANN] Ruby-GNOME2-0.6.0
Date: Thu, 14 Aug 2003 03:41:07 +0900

>  FreeBSD 4.x でビルドすると pthread のリンクエラーが出る問題が
> あり、 FreeBSD GNOME Project の Joe Marcus Clarke から次のような
> 報告とパッチが送られてきました。
> 
>  (ほかの環境でも)問題ないようであれば取り込んでいただけますか?
> よろしくお願いします。
> 
> At Tue, 12 Aug 2003 00:02:44 -0400,
> Joe Marcus Clarke wrote:
> > I was trying to update ruby-gnome2 on my -STABLE machine, and found it
> > couldn't resolve pthread symbols.  Looks like the Ruby configurator is
> > only getting the -l libraries when -STABLE requires -pthread as well. 
> > The attached patch solved the problem for me.  Thanks!

Ruby 1.8.0 の mkmf.rb に合わせて、
--libs-only-l と --libs-only-L を使うようにしたのですが、
-pthread などのフラグの事をすっかり忘れていました。

> --- ../glib/src/lib/mkmf-gnome2.rb.orig	Mon Aug 11 23:50:06 2003
> +++ ../glib/src/lib/mkmf-gnome2.rb	Mon Aug 11 23:50:08 2003
> @@ -42,7 +42,7 @@
>      STDOUT.flush
>      if exists? pkg
>        STDOUT.print "yes\n"
> -      $libs   += ' ' + libs_only_l(pkg)
> +      $libs   += ' ' + libs(pkg)
>        $LDFLAGS += ' ' + libs_only_L(pkg)
>        $CFLAGS += ' ' + cflags(pkg)
>        true

このパッチだと -L が $libs と $LDFLAGS の両方に入ってしまうので、
$LDFLAGS に libs_only_L(pkg) を追加しないようにするか、
あるいは以下のようなパッチの方が良いと思います。

Index: glib/src/lib/mkmf-gnome2.rb
===================================================================
RCS file: /cvsroot/ruby-gnome2/ruby-gnome2/glib/src/lib/mkmf-gnome2.rb,v
retrieving revision 1.5
diff -u -p -r1.5 mkmf-gnome2.rb
--- glib/src/lib/mkmf-gnome2.rb	2 Aug 2003 14:44:59 -0000	1.5
+++ glib/src/lib/mkmf-gnome2.rb	14 Aug 2003 05:36:24 -0000
@@ -27,6 +27,11 @@ module PKGConfig
   end
   module_function :libs_only_l
 
+  def libs_only_other(pkg)
+    `#{@@cmd} --libs-only-other #{pkg}`.chomp
+  end
+  module_function :libs_only_other
+
   def cflags(pkg)
     `#{@@cmd} --cflags #{pkg}`.chomp
   end
@@ -43,7 +48,7 @@ module PKGConfig
     if exists? pkg
       STDOUT.print "yes\n"
       $libs   += ' ' + libs_only_l(pkg)
-      $LDFLAGS += ' ' + libs_only_L(pkg)
+      $LDFLAGS += ' ' + libs_only_other(pkg) + ' ' + libs_only_L(pkg)
       $CFLAGS += ' ' + cflags(pkg)
       true
     else

--
酒井 政裕 / Masahiro Sakai