4

一意の識別子を生成するためのネイティブC拡張Rubygemを構築しています(ここにあります)。ライブラリで可能であれば(C拡張機能を介して) libuuidを使用し、単純なRuby実装にフォールバックしたいと思います。現在、UUIDを生成するためのCコードとRubyコードの両方がありますが、正常なフォールバックを構成する方法がわかりません。何か案は?

4

1 に答える 1

3

メソッドにはhave_library戻り値があります。

func指定されたエントリ ポイントが 内に見つかるかどうかを返しますlib

したがって、これを行うことができるはずです:

$defs.push('-DUSE_RUBY_UUID') if !have_library('uuid')
create_makefile("identifier")

次に、定義されていない場合はlibuuidUSE_RUBY_UUIDを使用し、定義されている場合は Ruby UUID ライブラリを呼び出すようにC を設定します。

奇妙なことに、 のメソッドhave_headerhave_funcメソッドがmkmf.rbマクロを追加します。

# File mkmf.rb, line 840
def have_header(header, preheaders = nil, &b)
  checking_for header do
    if try_header(cpp_include(preheaders)+cpp_include(header), &b)
      $defs.push(format("-DHAVE_%s", header.tr_cpp))
      true
    else
      false
    end
  end
end

しかしhave_library、自分でやらせます。

于 2011-06-25T22:03:57.770 に答える