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