From: Hidetoshi NAGAI Date: 2005-01-05T16:50:01+09:00 Subject: [ruby-dev:25409] Re: tkutil is installed on no tcl/tk environment 永井@知能.九工大です. From: Hidetoshi NAGAI Subject: [ruby-dev:25300] Re: tkutil is installed on no tcl/tk environment Date: Fri, 24 Dec 2004 12:44:43 +0900 Message-ID: <20041224.124439.74736063.nagai@ai.kyutech.ac.jp> > まぁ,今時 tcltklib を単独で使いたい人がいるかのと問われれば > 皆無に等しいという気はします. > tkutil, tk 共に tcltklib がなければ動かないわけですし, > 「統合」というのもおかしな選択肢ではないですね. > > いずれにせよ,現時点で 1.8.2 に手を入れるには大きすぎる問題ですので > 統合その他の対策については 1.8.2 のリリース後に考えましょう. tcltklib, tk, tkutil を一つのディレクトリにまとめてみました. ファイル構成を ---------------------------------------------------------------------------- ChangeLog.tkextlib README.ActiveTcl lib/ tcltklib.c MANUAL_tcltklib.eng README.fork old-README.tcltklib.eucj tkutil.c MANUAL_tcltklib.eucj README.tcltklib sample/ README.1st extconf.rb stubs.c ---------------------------------------------------------------------------- というようにした上で,extconf.rb は tcltklib のものをベースに 以下の変更を加えたものにしてみました. かなり不細工なことをしていますが,tcltklib.so と tkutil.so とを同一の extconf.rb から生成しなければ tcltklib のためのチェック結果を tkutil のために活用できない (...わけではないのでしょうけど,処理順の保証が できるのかよくわからなかったので) ために無理やりに組み込んだ結果です. とりあえずは tcltklib のコンパイル条件が整わなければ Makefile は作成 されずに Ruby/Tk 全般がインストールされないというようにはなりますが, 良い方法だと思っているわけではないので,現在の mkmf.rb の枠組みの中で より適切な方法を教えていただけますと助かります. --- ../../tcltklib/extconf.rb 2004-12-23 12:48:49.000000000 +0900 +++ extconf.rb 2005-01-05 15:22:42.000000000 +0900 @@ -254,5 +254,52 @@ $LDFLAGS += ' -framework Tk -framework Tcl' end - create_makefile("tcltklib") if stubs or pthread_check + if stubs or pthread_check + # create Makefile + $objs = ["stubs.o", "tcltklib.o"] + + mk_tkutil = "\n\n" + mk_tkutil << "OBJS2 = tkutil.#{$OBJEXT}\n" + mk_tkutil << "TARGET2 = tkutil\n" + mk_tkutil << "DLLIB2 = $(TARGET2).#{CONFIG['DLEXT']}\n" + mk_tkutil << "STATIC_LIB2 = $(TARGET2).#{$LIBEXT}\n" + mk_tkutil << "\n" + mk_tkutil << 'CLEANLIBS2 = "$(TARGET2).{lib,exp,il?,tds,map}" $(DLLIB2)' + mk_tkutil << "\n\n" + mk_tkutil << "all: $(DLLIB2)\n" + mk_tkutil << "static: $(STATIC_LIB2)\n" + mk_tkutil << "\n" + + mk_tkutil << CLEANINGS.sub(/\$\(CLEANLIBS\)/, "$(CLEANLIBS) $(CLEANLIBS2)") + mk_tkutil << "\n\n" + + mk_tkutil << "$(DLLIB2): $(OBJS2)\n\t" + mk_tkutil << "@-$(RM) $@\n\t" + mk_tkutil << "@-$(RM) $(TARGET2).lib\n\t" if $mswin + + LINK_SO2 = if CONFIG["DLEXT"] == $OBJEXT + "ld $(DLDFLAGS) -r -o $(DLLIB2) $(OBJS2)\n" + else + "$(LDSHARED) $(DLDFLAGS) $(LIBPATH) #{OUTFLAG}$(DLLIB2) " \ + "$(OBJS2) $(LOCAL_LIBS) $(LIBS)" + end + mk_tkutil << LINK_SO2 + + mk_tkutil << "\n\n" + mk_tkutil << "$(STATIC_LIB2): $(OBJS2)\n\t" + mk_tkutil << "$(AR) #{config_string('ARFLAGS') || 'cru '}$@ $(OBJS2)" + if ranlib = config_string('RANLIB') + mk_tkutil << "\n\t@-#{ranlib} $(DLLIB2) 2> /dev/null || true" + end + mk_tkutil << "\n\n\n" + + mk_tkutil << "install: $(RUBYARCHDIR)/$(DLLIB2)\n" + mk_tkutil << "$(RUBYARCHDIR)/$(DLLIB2): $(DLLIB2) $(RUBYARCHDIR)\n" + mk_tkutil << "\t@$(INSTALL_PROG) $(DLLIB2) $(RUBYARCHDIR)\n" + + CLEANINGS.replace(mk_tkutil) + + ($INSTALLFILES||=[]) << ["lib/tkextlib/SUPPORT_STATUS", "$(RUBYLIBDIR)", "lib"] + create_makefile("tcltklib") + end end -- 永井 秀利 (九工大 知能情報) nagai@ai.kyutech.ac.jp