From: shugo@... (Shugo Maeda) Date: 1997-11-27T17:21:33+09:00 Subject: [ruby-dev:936] Re: extmk.rb 前田です。 In message "[ruby-dev:930] Re: extmk.rb" Eiji-usagi-MATSUmoto wrote: |それと、コンパイルとは関係ないんですが、Motifは持っている人と |持っていない人がいると思うので、常にlibXmを要求するような形は |避けた方がいいと思うんですが、いかが? | |それと、X ToolKitというと、いわゆるlibXtのことを指すと思って |しまうので、いっそのこと | | ・ X ToolKit 拡張もじゅーる -- libXtの拡張もじゅーる | ・ Athena Widget 拡張もじゅーる -- libXawの拡張もじゅーる | ・ Motif 拡張もじゅーる -- libXmの拡張もじゅーる | |というように、3つの拡張モジュールに分けた方が嬉しいような気が |します。 最初こうしようと思ったのですが,MotifモジュールがXtモジュール に依存するので,拡張モジュールを分離するのは止めて,rubyのモジ ュールをパッケージのように使うことにしました。 X11/Xaw/Label.hやXm/XmAll.hがあればAthena/Motifモジュールを定義 するようになっています。 今のところ,下記のような感じのスクリプトが動いています。 # testapp.rb require 'xtoolkit' app = XToolkit::Application.new('TestApp') app.addCallback('destroyCallback') do exit end board = Motif::BulletinBoard.new(app, 'board') text = Motif::Text.new(board, 'text') printButton = Motif::PushButton.new(board, 'printButton') printButton.addCallback('activateCallback') do print text.getString, "\n" end quitButton = Motif::PushButton.new(board, 'quitButton') quitButton.addCallback('activateCallback') do exit end app.realize app.mainloop !TestApp *background: grey *foreground: black *board.geometry: 200x100 *printButton.labelString: Print *printButton.x: 60 *printButton.y: 50 *quitButton.labelString: Quit *quitButton.x: 110 *quitButton.y: 50 In message "[ruby-dev:932] Re: extmk.rb" Yukihiro Matsumoto wrote: ||ね.というわけで,最初の前田さんのパッチで問題無しだと思いま ||す. | |と思ったんですが,前田さんのパッチで$(DLDFLAGS)が外されたと |ころって,静的リンク用のオブジェクトファイルを作る時だけじゃ |なくて,*.oな動的リンクモジュールを使う時にも使われるんです |よね.これはまずいですね.というわけで,置き換えパッチです. あ,すみません,全然考えていませんでした。 In message "[ruby-dev:934] Re: extmk.rb" Yukihiro Matsumoto wrote: |それはそうと,なんでlXmや-lXawなどが,$(DLDLIBS)に含まれる |んでしょう? $LDFLAGSに追加したのかな? 何度やってもhave_library("Xm", ...)が成功しないので,$LDFLAGSに 追加していたのですが,ext/config.cacheのせいでした(^^; 結局,extconf.rbを次のようにしたら,パッチをあてる前のextmk.rb でも問題なくコンパイルできました。 $LDFLAGS = "-L/usr/X11/lib" if have_header("X11/Intrinsic.h") and have_library("X11", "XCreateWindow") and have_library("Xt", "XtOpenApplication") if have_header("X11/Xaw/Label.h") have_library("Xaw", "XawInitializeWidgetSet") end if have_header("Xm/XmAll.h") have_library("Xm", "XmUpdateDisplay") end create_makefile("xtoolkit") end |p.s. |1.1b0からはrubyのソースツリーが残っていれば,extの下でなくて |も拡張モジュールをコンパイルできるようになりました.拡張モジュー |ルの作り方そのものは今までと同じで大丈夫です. | |その場合にはコンパイル時にMakefile生成用のコマンドを起動する |必要があります. | | ruby -r mkmf extconf.rb これで拡張モジュールのインストールが楽になりますね:-) |これで懸案は残りひとつ…. 何でしょう? -- 前田 修吾