From: Minero Aoki Date: 2007-02-23T11:03:33+09:00 Subject: [ruby-dev:30401] Re: [ruby_1_8] can't grub Digest::SHAxxx on powerpc-darwin 青木です。 On 2007/02/12, at 2:20, Tadashi Saito wrote: > こんばんは。斎藤と申します。 > 1.8.6のリリーススケジュールを耳にしまして、久しぶりに > ruby_1_8をMac OS X > でビルドしてみました。以下のようにconfigureした後 > $ ruby_1_8 -rdigest -e 'Digest::SHA384' > /lib/ruby/1.8/digest.rb:15:in `const_missing': > Digest class not found: Digest::SHA256 (NameError) dln.c のコンパイル時に「NSIsSymbolNameDefined is deprecated」 と警告が出ていました。どうも dlopen が使われてないようです。 dlopen を使うように変えたところ、元の digest.rb が動くように なりました。 ~/c/ruby-1.8 % /usr/local/pkg/ruby-1.8/bin/ruby -v -rdigest -e 'p Digest::SHA384' ruby 1.8.6 (2007-02-19 patchlevel 5000) [i686-darwin8.8.3] Digest::SHA384 ~/c/ruby-1.8 % grep autoload /usr/local/pkg/ruby-1.8/lib/ruby/1.8/ digest.rb autoload "SHA256", "digest/sha2.so" autoload "SHA384", "digest/sha2.so" autoload "SHA512", "digest/sha2.so" 環境は以下の通りです。 ~/c/ruby-1.8 % uname -srm Darwin 8.8.3 i386 参考のためパッチをはりつけておきます。 -- 青木峰郎 Index: dln.c =================================================================== --- dln.c (revision 11808) +++ dln.c (working copy) @@ -81,19 +81,27 @@ # include "macruby_private.h" #endif +#if defined(__APPLE__) && defined(__MACH__) +# if defined(HAVE_DLOPEN) +# define MACOSX_DLOPEN +#else +# define MACOSX_DYLD +# endif +#endif + #ifdef __BEOS__ # include #endif #ifndef NO_DLN_LOAD -#if defined(HAVE_DLOPEN) && !defined(USE_DLN_A_OUT) && !defined (_AIX) && !defined(__APPLE__) && !defined(_UNICOSMP) +#if defined(HAVE_DLOPEN) && !defined(USE_DLN_A_OUT) && !defined (_AIX) && !defined(MACOSX_DYLD) && !defined(_UNICOSMP) /* dynamic load with dlopen() */ # define USE_DLN_DLOPEN #endif #ifndef FUNCNAME_PATTERN -# if defined(__hp9000s300) || (defined(__NetBSD__) && !defined (__ELF__)) || defined(__BORLANDC__) || (defined(__FreeBSD__) && ! defined(__ELF__)) || (defined(__OpenBSD__) && !defined(__ELF__)) || defined(NeXT) || defined(__WATCOMC__) || defined(__APPLE__) +# if defined(__hp9000s300) || (defined(__NetBSD__) && !defined (__ELF__)) || defined(__BORLANDC__) || (defined(__FreeBSD__) && ! defined(__ELF__)) || (defined(__OpenBSD__) && !defined(__ELF__)) || defined(NeXT) || defined(__WATCOMC__) || defined(MACOSX_DYLD) # define FUNCNAME_PATTERN "_Init_%s" # else # define FUNCNAME_PATTERN "Init_%s" @@ -1141,7 +1149,7 @@ #endif #endif #else -#ifdef __APPLE__ +#ifdef MACOSX_DYLD #include #endif #endif @@ -1403,7 +1411,7 @@ } #endif /* _AIX */ -#if defined(NeXT) || defined(__APPLE__) +#if defined(NeXT) || defined(MACOSX_DYLD) #define DLN_DEFINED /*---------------------------------------------------- By SHIROYAMA Takayuki Psi@fortune.nest.or.jp