[bug:trunk] Re: [ruby-cvs:31633] Ruby:r24415 (trunk): * ext/digest/sha2/sha2.[ch]: Update to 1.0 REL

e$B$3$s$K$A$O!"$J$+$`$ie(B(e$B$&e(B)e$B$G$9!#e(B

e$B2<5-$Ne(Bcommite$B$N7k2L!"e(BVCe$B$G$O%S%k%I$,$G$-$^$;$s!#e(B

(1) BYTE_ORDERe$B%^%/%mEy$NDj5A$,I,MW$J$i!“e(Bextconf.rbe$B$GM-L5$r3Ne(B
e$BG’$7$F!”$J$1$l$PDj5A$9$k$+%S%k%IBP>]$+$i=|30$7$F$/$@$5$$!#e(B

(2) have_headere$B%^%/%m$G%X%C%@$NB8:_$r%A%'%C%/$7$F$$$k$J$i!"e(B
e$B$J$$;~$Oe(B#includee$B$7$J$$$G$/$@$5$$!#e(B

In message “[ruby-cvs:31633] Ruby:r24415 (trunk): *
ext/digest/sha2/sha2.[ch]: Update to 1.0 RELEASE which fixes an”
on Aug.06,2009 01:40:40, [email protected] wrote:

Modified files:
trunk/ChangeLog
trunk/ext/digest/sha2/sha2.c
trunk/ext/digest/sha2/sha2.h

e$B$=$l$G$O!#e(B

At Thu, 6 Aug 2009 14:07:19 +0900,
U.Nakamura wrote:

下記のcommitの結果、VCではビルドができません。

 ごめんなさい。

(1) BYTE_ORDERマクロ等の定義が必要なら、extconf.rbで有無を確
認して、なければ定義するかビルド対象から除外してください。

 なければソース上で定義するように書いたつもりだったのですが
sha2.c から sha2.h に移そうとしたときに消えてそのままcommit
してしまったようです。

(2) have_headerマクロでヘッダの存在をチェックしているなら、
ない時は#includeしないでください。

 どれのことかにわかにはわからなかったので上記だけ直しました。

e$B%A%1%C%He(B #1894 e$B$,99?7$5$l$^$7$?!#e(B (by Akinori MUSHA)

e$B%9%F!<%?%9e(B Opene$B$+$ie(BClosede$B$KJQ99e(B
e$B?JD=e(B % 0e$B$+$ie(B100e$B$KJQ99e(B

Applied in changeset r24426.

http://redmine.ruby-lang.org/issues/show/1894

e$B$3$s$K$A$O!"$J$+$`$ie(B(e$B$&e(B)e$B$G$9!#e(B

In message “[ruby-dev:39030] Re: [bug:trunk] Re: [ruby-cvs:31633]
Ruby:r24415 (trunk): * ext/digest/sha2/sha2.[ch]: Update to 1.0 RELEASE
which fixes an”
on Aug.06,2009 19:51:37, [email protected] wrote:

(2) have_headere$B%^%/%m$G%X%C%@$NB8:_$r%A%'%C%/$7$F$$$k$J$i!"e(B
e$B$J$$;~$Oe(B#includee$B$7$J$$$G$/$@$5$$!#e(B

e$B!!$I$l$N$3$H$+$K$o$+$K$O$o$+$i$J$+$C$?$N$G>e5-$@$1D>$7$^$7$?!#e(B

e$B$J$<$+;X$,3j$C$F!V%^%/%m!W$H=q$$$F$7$^$$$^$7$?$,$=$3$O4V0c$$e(B
e$B$G$7$?!#e(B

extconf.rbe$B$NCf$Ge(Bhave_headere$B$r;H$C$Fe(Bsys/types.he$B!&e(Binttypes.he$B!&e(B
unistd.he$B$NB8:_$r3NG’$7$F$$$^$9$,!"e(Bsha2.he$BFb$GL5>r7o$Ke(Bsys/types.h
e$B$He(Binttypes.he$B$re(B#includee$B$7$F$$$^$9!#e(B
e$B$^$?!"e(Bunistd.he$B$O7k6Ie(B#includee$B$7$F$$$^$;$s!#e(B

e$B$G!"B3$-$J$N$G$9$,!"e(B

(3) e$B3d$H2<$i$J$$%P%0$,F~$C$F$$$F@EE*$^$?$OF0E*%j%s%/$,IT2DG=e(B
e$B$K$J$C$F$$$?$N$G!"e(Br24427e$B$G>!<j$KD>$7$F$*$-$^$7$?!#e(B
e$B$43NG’$/$@$5$$!#e(B

(4)
e$B%F%9%H$r<B9T$7$F$$?$ie(Bsha2.soe$BMm$$N%F%9%H$,0l@Z<B9T$5$l$Je(B
e$B$/$F$J$s$@$+$$+$7$$$H;W$C$?$i!"e(Bsha2.rbe$B$,<YKb$r$7$FC1=c$Ke(B
e$B$Oe(Bsha2.soe$B$,%m!<%I$5$l$J$/$J$C$F$$$^$7$?!#e(B
r24428e$B$G>!<j$KD>$7$F$
$-$^$7$?$N$G$43NG’$/$@$5$$!#e(B
e$B$3$l$OB>$N%V%i%s%A$K$b%P%C%/%]!<%H$,I,MW$@$H;W$$$^$9!#e(B

(5)
sha2.ce$BFb$Ge(BULLe$B@\Hx<-$r;H$C$Fe(B64bite$B@0?t%j%F%i%k$r;HMQ$7$F$$e(B
e$B$^$9$,!"e(BULLe$B$Oe(BC99e$B$GDI2C$5$l$?$b$N$J$N$G8E$$%3%s%Q%$%i$G$Oe(B
e$B%3%s%Q%$%k%(%i!<$K$J$j$^$9e(B(VCe$B$@$He(BUI64e$B$H$$$&@\Hx<-$,B8:$7e(B
e$B$^$9e(B)e$B!#e(B
e$B$I$&D>$9$N$,$h$$$+H=CG$G$-$F$$$J$$$N$G$9$,!"$3$3$Ge(Brubye$B$Ne(B
e$B%S%k%I$,;
$^$C$A$c$&$N$G2?$H$+$J$s$J$$$G$7$g$&$+!#e(B
e$BC1$K!Ve(BULLe$B!W$rA4It:o=|$9$k$@$1$@$HB>$N%3%s%Q%$%i$GLdBj$,=Pe(B
e$B$?$j$7$^$9$+$Me(B?

e$B$=$l$G$O!#e(B

e$B$3$s$K$A$O!"$J$+$`$ie(B(e$B$&e(B)e$B$G$9!#e(B

In message “[ruby-dev:39033] Re: [bug:trunk] Re: [ruby-cvs:31633]
Ruby:r24415 (trunk): * ext/digest/sha2/sha2.[ch]: Update to 1.0 RELEASE
which fixes an”
on Aug.06,2009 21:59:40, [email protected] wrote:

e$B$"$l!#e(Binttypes.h e$B$,e(B #include e$B$5$l$k$H$$$&$3$H$Oe(B #ifdef RUBY e$B$Ne(B
#else e$B$NJ}$KFMF~$7$F$$$^$9$+!#e(B*.c e$B$O$$$:$l$be(B defs.h e$B$r7PM3$7$Fe(B
#include “ruby.h” e$B$7$F$$$k$N$Ge(B RUBY e$B$ODj5A$5$l$F$$$k$O$:$G$9$,!D!#e(B

e$B$“$”<:Ni$7$^$7$?!"8+4V0c$($F$$$^$7$?!#e(B

#if defined(GNUC) || defined(_HPUX_SOURCE) || defined(IBMC)
#define ULL(number) number##ULL
#else
#define ULL(number) (uint64_t)(number)
#endif

e$B$H$7$Fe(B ULL() e$B$G3g$kJQ99$r:FE,MQ$7$^$9!#e(B

e$B$h$m$7$/$*4j$$$7$^$9$G$9!#e(B

e$B$=$l$G$O!#e(B

At Thu, 6 Aug 2009 21:28:03 +0900,
U.Nakamura wrote:

extconf.rbの中でhave_headerを使ってsys/types.h・inttypes.h・
unistd.hの存在を確認していますが、sha2.h内で無条件にsys/types.h
とinttypes.hを#includeしています。
また、unistd.hは結局#includeしていません。

あれ。inttypes.h が #include されるということは #ifdef RUBY の
#else の方に突入していますか。*.c はいずれも defs.h を経由して
#include “ruby.h” しているので RUBY は定義されているはずですが…。

sys/types.h は以前から digest/defs.h で無条件に #include して
いるのでチェックの意味がないですね。unistd.h のチェックは何かの
名残で今は無意味なようです。他の digest/*/extconf.rb とともに、
この2つのチェックはやめます。

で、続きなのですが、

(3) 割と下らないバグが入っていて静的または動的リンクが不可能
になっていたので、r24427で勝手に直しておきました。
ご確認ください。

ありがとうございます。

(4) テストを実行してみたらsha2.so絡みのテストが一切実行されな
くてなんだかおかしいと思ったら、sha2.rbが邪魔をして単純に
はsha2.soがロードされなくなっていました。
r24428で勝手に直しておきましたのでご確認ください。
これは他のブランチにもバックポートが必要だと思います。

1.8.8devにも入れます。

(5) sha2.c内でULL接尾辞を使って64bit整数リテラルを使用してい
ますが、ULLはC99ã§è¿½åŠ ã•ã‚ŒãŸã‚‚ã®ãªã®ã§å¤ã„ã‚³ãƒ³ãƒ‘ã‚¤ãƒ©ã§ã¯
コンパイルエラーになります(VCだとUI64という接尾辞が存在し
ます)。
どう直すのがよいか判断できていないのですが、ここでrubyの
ビルドが止まっちゃうので何とかなんないでしょうか。
単に「ULL」を全部削除するだけだと他のコンパイラで問題が出
たりしますかね?

#if defined(GNUC) || defined(_HPUX_SOURCE) || defined(IBMC)
#define ULL(number) number##ULL
#else
#define ULL(number) (uint64_t)(number)
#endif

として ULL() で括る変更を再適用します。