なかだです。

At Fri, 27 Oct 2006 02:47:47 +0900,
Yutaka Kanemoto wrote in [ruby-dev:29698]:
> すこし前の以下のパッチ
> * lib/mkmf.rb (init_mkmf): set default $LDFLAGS. Patch by Michal
> Suchanek <hramrach at centrum.cz>. [ruby-talk:216256]
> により、AIXで拡張ライブラリのcompileが通らなくなったので調べました。

すいません、そんなところに影響が出るとは。

> ひとつおたずねしたいのですが、*FLAGSという
> 変数について以下のように解釈したのですが、意図されているように
> 理解できていますでしょうか?
> DLDFLAGS        *.soの共有ライブラリを作る時にリンカにわたしたいもの
> XLDFLAGS        rubyコマンドをつくるとき"だけ"にリンカにわたしたいもの
> LDFLAGS         いつでもわたしたいもの

XLDFLAGSは実行ファイルを作るとき、かな?

> XLDFLAGSをminirubyにわたせばいいかと思ったのですが、
> 過去ログをみると、やはり、XLDFLAGSはrubyをリンクするときのみのためのもの
> のようです。
> http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/19723
> http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/23588

[ruby-dev:23565]ではminirubyにもXLDFLAGSを使おうという話になってますね。

> minirubyにこのオプションがわたらない場合の現象としましては、
> make installの途中でcoreを吐いてしまいます。
> minirubyがetc.soのInit_etcにはいった中でおちています。

MINIOBJSにdmydln.oを追加して、minirubyでは拡張ライブラリをロードしない
ようにする、という方法もありますが。

> まとめますと、rubyとminirubyのリンク時にだけわたしたい
> オプションがあるのでなんとかしたい。ということになります。

これではどうでしょうか。-bオプションの順序は問題ではない、AIXでのダイ
ナミックリンクは独自っぽいのでdln_a_outは無効、と仮定してます。


Index: Makefile.in =================================================================== RCS file: /pub/cvs/ruby/Makefile.in,v retrieving revision 1.55.2.18 diff -U 2 -p -r1.55.2.18 Makefile.in --- Makefile.in 1 Oct 2006 15:00:32 -0000 1.55.2.18 +++ Makefile.in 27 Oct 2006 04:34:29 -0000 @@ -98,5 +98,5 @@ all: miniruby$(EXEEXT): @$(RM) $@ - $(PURIFY) $(CC) $(MAINOBJ) $(MINIOBJS) $(LIBRUBY_A) $(LIBS) $(OUTFLAG)$@ $(LDFLAGS) $(MAINLIBS) + $(PURIFY) $(CC) $(LDFLAGS) $(XLDFLAGS) $(MAINLIBS) $(MAINOBJ) $(MINIOBJS) $(LIBRUBY_A) $(LIBS) $(OUTFLAG)$@ $(PROGRAM): Index: configure.in =================================================================== RCS file: /pub/cvs/ruby/configure.in,v retrieving revision 1.212.2.63 diff -U 2 -p -r1.212.2.63 configure.in --- configure.in 22 Oct 2006 19:28:46 -0000 1.212.2.63 +++ configure.in 27 Oct 2006 04:44:38 -0000 @@ -1046,11 +1046,13 @@ if test "$with_dln_a_out" != yes; then rb_cv_dlopen=yes ;; aix*) if test "$GCC" = yes; then - : ${LDSHARED='gcc -shared'} - DLDFLAGS='-Wl,-G -eInit_$(TARGET)' - LDFLAGS='-Wl,-brtl -Wl,-bE:ruby.imp' - else - : ${LDSHARED='/usr/ccs/bin/ld'} - DLDFLAGS='-G -eInit_$(TARGET)' - LDFLAGS="-brtl -bE:ruby.imp" + : ${LDSHARED='$(CC) -shared'} + DLDFLAGS='-Wl,-G -eInit_$(TARGET)' + LDFLAGS='-Wl,-brtl' + XLDFLAGS='-Wl,-bE:ruby.imp' + else + : ${LDSHARED='/usr/ccs/bin/ld'} + DLDFLAGS='-G -eInit_$(TARGET)' + LDFLAGS='-brtl' + XLDFLAGS='-bE:ruby.imp' fi : ${ARCHFILE="ruby.imp"} @@ -1360,10 +1362,9 @@ if test "$enable_shared" = 'yes'; then aix*) if test "$GCC" = yes; then - LIBRUBY_LDSHARED='$(CC) -shared' - LIBRUBY_DLDFLAGS='-Wl,-G -Wl,-bE:ruby.imp -Wl,-bnoentry' + LIBRUBY_DLDFLAGS='-Wl,-G -Wl,-bnoentry' else - LIBRUBY_LDSHARED='/usr/ccs/bin/ld' - LIBRUBY_DLDFLAGS='-G -bE:ruby.imp -bnoentry' + LIBRUBY_DLDFLAGS='-G -bnoentry' fi + LIBRUBY_DLDFLAGS="$LIBRUBY_DLDFLAGS $XLDFLAGS" LIBRUBYARG_SHARED='-L${libdir} -lruby' SOLIBS='-lm -lc' @@ -1501,7 +1502,4 @@ case "$target_os" in MINIOBJS=dmydln.o ;; - aix*) - PREINSTALL='@$(RM) -r $(prefix)/lib/$(LIBRUBY_A) $(prefix)/lib/$(LIBRUBY_SO) $(prefix)/lib/ruby/$(MAJOR).$(MINOR)/$(arch)' - ;; *) ;; @@ -1536,5 +1534,4 @@ AC_SUBST(COMMON_HEADERS) AC_SUBST(EXPORT_PREFIX) AC_SUBST(MINIOBJS) -AC_SUBST(PREINSTALL) MAKEFILES="Makefile `echo $FIRSTMAKEFILE | sed 's/:.*//'`"
-- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦