From: Masafumi Y. <my...@gm...> - 2013-10-31 00:28:58
|
横山です。 次のリリースに向けて、Windows用gemにバンドルするライブラリー のバージョンアップと動作確認を始めました。 以前からクロスコンパイル環境を整えようとはしていたのですが、 本腰を入れて取り組もうと思います。 環境構築のメモはこちらです。 https://gist.github.com/myokoym/6497033 バージョンアップの方針としては、現時点でstableのバージョンに 上げようと思います。 http://www.gtk.org/documentation.php 詰まったらエラーログなどを当MLに投げさせていただきますので、 よろしくお願いします。 早速ですが、GLib-2.38.1をクロスコンパイルしようとすると、 ../../gobject/glib-genmarshal.c:20:20: fatal error: config.h: そのようなファイルやディレクトリはありません というエラーが出ました。 https://gist.github.com/myokoym/7235664 こちらでも調査を進めますが、もし既知の対応方法はあれば教えて くださいませ。 -- Masafumi Yokoyama http://myokoym.net/ |
From: Kouhei S. <ko...@co...> - 2013-10-31 14:18:34
|
須藤です。 In <CAE...@ma...> "[ruby-gnome2-devel-ja] Windows用gemのクロスコンパイルと動作確認について" on Thu, 31 Oct 2013 09:28:51 +0900, Masafumi Yokoyama <my...@gm...> wrote: > 次のリリースに向けて、Windows用gemにバンドルするライブラリー > のバージョンアップと動作確認を始めました。 ありがとうございます! > 環境構築のメモはこちらです。 > https://gist.github.com/myokoym/6497033 うぉ! 私、2年前にこんなの書いていたんですね!すごい。。。 https://github.com/ruby-gnome2/ruby-gnome2/blob/master/release.rd 少し古くなってますけど。。。 例えば、今はrake dist:testでtar.gzのテストができたりします。 Rubyは2.0.0を使ってください。Ruby 1.9.3バンドルのRubyGemsが 古くて最新のrake-compilerだと使えないんですよ。(1.9.3バンド ルのRubyGemsをアップデートしてもいいです。) > * ruby-gnome2の全パッケージをインストール(たぶん不要) > * ruby-gnome2のrootでbundle install(たぶん不要) > * rcairoのrootでbundle install(たぶん不要) はい、不要です。(不要であって欲しい。) > バージョンアップの方針としては、現時点でstableのバージョンに > 上げようと思います。 > http://www.gtk.org/documentation.php はい、それでよいです! > 詰まったらエラーログなどを当MLに投げさせていただきますので、 > よろしくお願いします。 はい! > 早速ですが、GLib-2.38.1をクロスコンパイルしようとすると、 > > ../../gobject/glib-genmarshal.c:20:20: fatal error: config.h: > そのようなファイルやディレクトリはありません > > というエラーが出ました。 > https://gist.github.com/myokoym/7235664 うーん、クロスコンパイル判定がうまくいっていないような気が済 ますねぇ。クロスコンパイルしているときは gobject/glib-genmarshalを作るんじゃなくてシステムの glib-genmarshalを使うはずなんですよ。 configureすると checking whether we are cross compiling... みたいなのがでていると思うのでyesになっているか確認してみて ください。 |
From: Masafumi Y. <my...@gm...> - 2013-11-01 13:41:56
|
横山です。 2013年11月1日 1:54 Masafumi Yokoyama <my...@gm...>: >>> 早速ですが、GLib-2.38.1をクロスコンパイルしようとすると、 >>> >>> ../../gobject/glib-genmarshal.c:20:20: fatal error: config.h: >>> そのようなファイルやディレクトリはありません >>> >>> というエラーが出ました。 >>> https://gist.github.com/myokoym/7235664 >> >> うーん、クロスコンパイル判定がうまくいっていないような気が済 >> ますねぇ。クロスコンパイルしているときは >> gobject/glib-genmarshalを作るんじゃなくてシステムの >> glib-genmarshalを使うはずなんですよ。 >> >> configureすると >> >> checking whether we are cross compiling... >> >> みたいなのがでていると思うのでyesになっているか確認してみて >> ください。 > > noでした。。。何か足りてないでしょうか。(configureログを含めて貼り直しました↓) > https://gist.github.com/myokoym/7235664 checking whether we are cross compiling... が no になっていた 理由ですが、Windows用プログラムが実行できるかどうかで判定して いるらしく、Wineがインストールされているせいで実行できてしま ってnoになっているようです。とりあえず/usr/bin/wineをリネーム して試してみると、yesになって先に進みました。 |
From: Masafumi Y. <my...@gm...> - 2013-11-03 09:47:07
|
横山です。 2013年11月2日 22:32 Kouhei Sutou <ko...@co...>: >> checking whether we are cross compiling... が no になっていた >> 理由ですが、Windows用プログラムが実行できるかどうかで判定して >> いるらしく、Wineがインストールされているせいで実行できてしま >> ってnoになっているようです。とりあえず/usr/bin/wineをリネーム >> して試してみると、yesになって先に進みました。 > > あぁ、なるほど! > > 手元でも試してみたら、確かに再現しました。 > > で、調べてみたんですが、これはGLibの問題ですねぇ。 そうでしたか。ということは、 checking whether we are cross compiling... はnoのままで問題ないということですね! > これで、パッチの登録は完了です。もう一度ビルドすると自動でパッ > チを当ててビルドしてくれます。 > > ruby-gnome2.win32/glib% rake win32:build > > これで、GLibのビルドがうまく通ったらこのパッチで問題がないこ > とがわかります。それでは、本家に報告しましょう。 問題がないことを確認したので、先にRuby-GNOME2の方に コミットしてしまおうと思います。できればgemの動作確認まで してからコミットしたかったのですが、gemの作成でつまづいて しまったので、確認はできていません。gemの作成については 別途質問させてください。 > コミットしたらパッチを作ります。 > > glib% git format-patch origin/master > 0001-test-add-missing-EXEEXT.patch > > カレントディレクトリに0001-test-add-missing-EXEEXT.patchとい > うファイル名でパッチができます。これをGLibに報告します。 パッチの作成までやってみました。せっかくとてもわかりやすい手順を 書いていただいたので、報告も私の方でやってみてよいでしょうか? |
From: Masafumi Y. <my...@gm...> - 2013-11-04 14:59:22
|
横山です。 2013年11月3日 21:51 Kouhei Sutou <ko...@co...>: >> そうでしたか。ということは、 checking whether we are cross compiling... >> はnoのままで問題ないということですね! > > はい、そうです。 > 64bit版Windows用のバイナリに対応するときはyesになると思いま > すが、32bit版Windows用のバイナリをビルドするときはnoのままで > 問題ないです!今のDebian/Ubuntuでは64bit版のexeが動くWineが > パッケージとして提供されていないのでexeが実行できずにクロス > コンパイル扱いになると思います。 わかりました。ありがとうございます! >> 問題がないことを確認したので、先にRuby-GNOME2の方に >> コミットしてしまおうと思います。できればgemの動作確認まで >> してからコミットしたかったのですが、gemの作成でつまづいて >> しまったので、確認はできていません。gemの作成については >> 別途質問させてください。 > > はい! gem作成失敗の件ですが、rakeのgem:win32:build:extタスクが `require': cannot load such file -- pkg-config (LoadError) が出て失敗してしまいます。設定が足りないでしょうか? rake-compilerは、以下のコマンドで設定しました。 rake-compiler cross-ruby VERSION=1.9.3-p448 EXTS=--without-extension rake-compiler cross-ruby VERSION=2.0.0-p247 EXTS=--without-extension 失敗時のログとrake-compilerのconfig.ymlは以下です。 https://gist.github.com/myokoym/7303335 >> パッチの作成までやってみました。せっかくとてもわかりやすい手順を >> 書いていただいたので、報告も私の方でやってみてよいでしょうか? > > ありがとうございます!ぜひ、よろしくおねがいします! > とても助かります!!! 報告してみました! https://bugzilla.gnome.org/show_bug.cgi?id=711372 |
From: Masafumi Y. <my...@gm...> - 2013-11-06 00:09:14
|
横山です。 2013年11月5日 18:52 Kouhei Sutou <ko...@co...>: > あぁ、これなんですが、実は、手元ではRUBYLIBでローカルの > pkg-config gemのパスを指定していました。 > > % RUBYLIB="$HOME/work/ruby/pkg-config/lib" rake ... pkg-config gemを用意してから、パスを指定して実行したところ、 先に進みました。ありがとうございます! 先には進んだのですが、別のエラー↓が出てしまいました。。。 Don't know how to build task 'tmp/i386-mingw32/stage/vendor/local' tmp/.../stage/にvendor/がコピーされていないようです。 gem:win32:build:vendorタスクの後に手動で tmp/.../stage/にvendor/をコピーしてからgem:win32:build:ext タスクを実行すると、エラーは発生せず、pkg/に glib2-2.0.3-x86-mingw32.gemが作成されました。 本来は自動でコピーされると思うのですが、手順ミスでしょうか。 失敗時は以下のようなログが出力されます。 /home/myokoym/.rbenv/versions/2.0.0-p247/bin/ruby -S rake RUBY_CC_VERSION=1.9.3:2.0.0 cross win32:builder:build:prepare:pkg_config native gem no configuration section for specified version of Ruby (rbconfig-i386-mingw32-1.9.3) install -c tmp/i386-mingw32/glib2/2.0.0/glib2.so lib/2.0/glib2.so cp tmp/i386-mingw32/glib2/2.0.0/glib2.so tmp/i386-mingw32/stage/lib/2.0/glib2.so rake aborted! Don't know how to build task 'tmp/i386-mingw32/stage/vendor/local' Tasks: TOP => gem => pkg/glib2-2.0.3-x86-mingw32.gem => pkg/glib2-2.0.3-x86-mingw32 (See full trace by running task with --trace) rake aborted! Command failed with status (1): [/home/myokoym/.rbenv/versions/2.0.0-p247/b...] /home/myokoym/work/ruby/ruby-gnome2.win32/Rakefile:374:in `block (7 levels) in <top (required)>' /home/myokoym/work/ruby/ruby-gnome2.win32/Rakefile:367:in `chdir' /home/myokoym/work/ruby/ruby-gnome2.win32/Rakefile:367:in `block (6 levels) in <top (required)>' /home/myokoym/work/ruby/ruby-gnome2.win32/Rakefile:366:in `each' /home/myokoym/work/ruby/ruby-gnome2.win32/Rakefile:366:in `block (5 levels) in <top (required)>' /home/myokoym/work/ruby/ruby-gnome2.win32/Rakefile:73:in `change_environment_variable' /home/myokoym/work/ruby/ruby-gnome2.win32/Rakefile:365:in `block (4 levels) in <top (required)>' Tasks: TOP => gem:win32:build:ext (See full trace by running task with --trace) > どこでpkg-configを扱うのがよいか決めあぐねてこのままなのでし > た。すみません。。。 > > 実は、以下のようにMAKE_N_JOBSも指定して複数のCPUコアを使って > ビルド時間を短縮したりもしています。。。 > > % RUBYLIB="$HOME/work/ruby/pkg-config/lib" MAKE_N_JOBS=8 rake ... > > うーん、rcairoみたいに相対パスからも探すようにするのがよいか > しら。。。 難しいですね。。。 ひとまず、作業が一段落したらリリース手順に追記しておきます。 (手順があれば当面はそのままでも大丈夫かと思います) |
From: Masafumi Y. <my...@gm...> - 2013-11-15 03:43:31
|
横山です。 2013年11月10日 23:39 Kouhei Sutou <ko...@co...>: > あぁ、rake-compilerのバージョンがあがって挙動が変わったから > ですねぇ。ruby-gnome2側を直す必要があります。 > > https://github.com/ranguba/rroonga/blob/master/Rakefile#L152 > > のコード相当の処理をruby-gnome2の今のビルドシステムに組み込 > むとよさそうな気がします。 ありがとうございます! Rroongaを参考に修正してコミットしました。 https://github.com/ruby-gnome2/ruby-gnome2/commit/86b853e0d07ee8d15475516fa546bef8dfcc3af4 作業を進めてはいるのですが、GObject-IntrospectionやGTK+なども パッチの修正や追加が必要そうなので、もうしばらくかかりそうです。 なんとか11月中には終わらせたいと思っています。 また詰まったらご相談させてください。 |
From: Masafumi Y. <my...@gm...> - 2013-11-26 15:03:28
|
横山です。 2013年11月16日 14:47 Kouhei Sutou <ko...@co...>: >> 作業を進めてはいるのですが、GObject-IntrospectionやGTK+なども >> パッチの修正や追加が必要そうなので、もうしばらくかかりそうです。 GObject-Introspectionのバージョンを上げたところ、パッチが合わ なくなっていたので、既存のファイルを修正してみました。 (確認ありがとうございます!あとでマージします) https://github.com/ruby-gnome2/ruby-gnome2/pull/207 こういった場合、パッチを作り直した方がよいでしょうか? また、本家に報告し直したほうがよいですか? >> また詰まったらご相談させてください。 pangoのビルド中に以下のエラーが発生しました。 どうしたらよいでしょうか。。。 linking shared-object pango.so /usr/bin/i686-w64-mingw32-ld: cannot find -lruby-cairo collect2: ld returned 1 exit status make: *** [pango.so] Error 1 rake aborted! https://gist.github.com/myokoym/7532652 > あ、あれ!?GNOME関連のAdvent Calendarが! > http://www.adventar.org/calendars/102 なんと!GNOMEブームの前兆ですね。 たぶん、ただのGNOME好きな一般人が作ったようなので、 お気軽にご登録ください!(140文字程度で十分です) |
From: Kouhei S. <ko...@co...> - 2013-11-27 13:28:49
|
須藤です。 In <CAE...@ma...> "Re: [ruby-gnome2-devel-ja] Windows用gemのクロスコンパイルと動作確認について" on Wed, 27 Nov 2013 00:03:19 +0900, Masafumi Yokoyama <my...@gm...> wrote: > GObject-Introspectionのバージョンを上げたところ、パッチが合わ > なくなっていたので、既存のファイルを修正してみました。 > (確認ありがとうございます!あとでマージします) > > https://github.com/ruby-gnome2/ruby-gnome2/pull/207 > > こういった場合、パッチを作り直した方がよいでしょうか? はい、できれば作りなおしたほうがいいです。 パッチに手パッチを当てるのはだいぶしんどいので。。。 > また、本家に報告し直したほうがよいですか? 基本的にはそうした方がよいですが、これは、そもそも報告してな かったんじゃないかなぁと思います。(私の勘違いで、報告してい たらパッチを更新したよーと報告したほうがよいです!) うっすらとした記憶なんですが。。。 当時、GNOMEのBugzillaを見ていたらなんか違う方法でクロスコン パイルに対応させようとしていたんですね。で、そのやりとりはわ りと活発にやっているような雰囲気で、この方向でサポートされる のかなぁと思った気がします。なので、この方法(.exeをWineで実 行するやり方)は取り込まれなくてもいいかなぁと思って報告して いなかった気がします。 > pangoのビルド中に以下のエラーが発生しました。 > どうしたらよいでしょうか。。。 > > linking shared-object pango.so > /usr/bin/i686-w64-mingw32-ld: cannot find -lruby-cairo > collect2: ld returned 1 exit status > make: *** [pango.so] Error 1 > rake aborted! > > https://gist.github.com/myokoym/7532652 rake-compilerのバージョンが上がってlibruby-cairo.aが rcairo/ext/cairo/以下に生成されなくなったからだと思います! たぶん、 rcairo/tmp/#{TARGET_HOST}/cairo/#{RUBY_VERSION}/libruby-cairo.a あたりにあると思います。具体的には rcairo/tmp/i386-mingw32/cairo/2.0.0/libruby-cairo.a あたりです。 ということなので、 https://github.com/ruby-gnome2/ruby-gnome2/blob/master/glib2/lib/mkmf-gnome2.rb#L109 https://github.com/ruby-gnome2/ruby-gnome2/blob/master/glib2/lib/mkmf-gnome2.rb#L123 あたりでtarget_build_dirのデフォルト値を target_source_dir(たぶん、これはext/cairo/になっている)を そのまま使うんじゃなくて、 "#{target_source_dir}/../../tmp/i386..."を使うようにすればい いと思います! >> あ、あれ!?GNOME関連のAdvent Calendarが! >> http://www.adventar.org/calendars/102 > > なんと!GNOMEブームの前兆ですね。 > たぶん、ただのGNOME好きな一般人が作ったようなので、 > お気軽にご登録ください!(140文字程度で十分です) ステキですね! |
From: Masafumi Y. <my...@gm...> - 2013-12-01 06:34:39
|
横山です。 2013年11月27日 22:28 Kouhei Sutou <ko...@co...>: > はい、できれば作りなおしたほうがいいです。 > パッチに手パッチを当てるのはだいぶしんどいので。。。 ですよね。。。 > 基本的にはそうした方がよいですが、これは、そもそも報告してな > かったんじゃないかなぁと思います。(私の勘違いで、報告してい > たらパッチを更新したよーと報告したほうがよいです!) 了解です!検索してみましたが報告されていないようなので、 ひとまずそのままにしておきます。 > rake-compilerのバージョンが上がってlibruby-cairo.aが > rcairo/ext/cairo/以下に生成されなくなったからだと思います! そもそもlibruby-cairo.aがどこにもいませんでした。。。 rcairoのルートで、`rake windows:build`の後に RUBYLIB="$HOME/work/ruby/pkg-config/lib" rake RUBY_CC_VERSION=1.9.3:2.0.0 cross clean compile native を実行すると rcairo/tmp/i386-mingw32/cairo/1.9.3/libruby-cairo.a rcairo/tmp/i386-mingw32/cairo/2.0.0/libruby-cairo.a ができました。で、この状態でpangoのビルドを実行すると、 エラーは発生せずgemファイルが生成されました。きちんと調べ ていませんが、mkmf-gnome2.rbの修正はいらないようです。 ただ、Windows上で`require "pango"`すると `require':127: 指定されたプロシージャが見つかりません。 になってしまったので、調査中です。。。 |
From: Masafumi Y. <my...@gm...> - 2013-12-02 02:31:31
|
横山です。 2013年12月1日 15:34 Masafumi Yokoyama <my...@gm...>: > ただ、Windows上で`require "pango"`すると > > `require':127: 指定されたプロシージャが見つかりません。 > > になってしまったので、調査中です。。。 Dependency Walkerでpango.soを調べたところ、 libfreetype-6.dll と libpixman-1-0.dll の InterlockedCompareExchange@12 が赤くなっていました。 推測ですが、↓の問題が直撃したのではないかと思います。 http://comments.gmane.org/gmane.comp.gnu.mingw.w64.general/7411 (英語を斜め読みしただけなので、見当違いかもしれません) 解決したのがmingw-w64のr5949で、ビルドに使ったUbuntu13.10は r5915のようなので、まだ直っていないのではないかと思っています。 http://packages.ubuntu.com/source/saucy/mingw-w64 mingw-w64のバージョンを上げて試してみるつもりです。 |
From: Kouhei S. <ko...@co...> - 2013-11-16 05:47:41
|
須藤です。 In <CAE...@ma...> "Re: [ruby-gnome2-devel-ja] Windows用gemのクロスコンパイルと動作確認について" on Fri, 15 Nov 2013 12:43:24 +0900, Masafumi Yokoyama <my...@gm...> wrote: > 2013年11月10日 23:39 Kouhei Sutou <ko...@co...>: >> あぁ、rake-compilerのバージョンがあがって挙動が変わったから >> ですねぇ。ruby-gnome2側を直す必要があります。 >> >> https://github.com/ranguba/rroonga/blob/master/Rakefile#L152 >> >> のコード相当の処理をruby-gnome2の今のビルドシステムに組み込 >> むとよさそうな気がします。 > > ありがとうございます! > Rroongaを参考に修正してコミットしました。 > > https://github.com/ruby-gnome2/ruby-gnome2/commit/86b853e0d07ee8d15475516fa546bef8dfcc3af4 ありがとうございます! > 作業を進めてはいるのですが、GObject-IntrospectionやGTK+なども > パッチの修正や追加が必要そうなので、もうしばらくかかりそうです。 はい、わかりました! > なんとか11月中には終わらせたいと思っています。 おぉ、すごいです! > また詰まったらご相談させてください。 はい、もちろんです! あ、あれ!?GNOME関連のAdvent Calendarが! http://www.adventar.org/calendars/102 |
From: Kouhei S. <ko...@co...> - 2013-11-10 14:39:49
|
須藤です。 In <CAE...@ma...> "Re: [ruby-gnome2-devel-ja] Windows用gemのクロスコンパイルと動作確認について" on Wed, 6 Nov 2013 09:09:07 +0900, Masafumi Yokoyama <my...@gm...> wrote: > 2013年11月5日 18:52 Kouhei Sutou <ko...@co...>: >> あぁ、これなんですが、実は、手元ではRUBYLIBでローカルの >> pkg-config gemのパスを指定していました。 >> >> % RUBYLIB="$HOME/work/ruby/pkg-config/lib" rake ... > > pkg-config gemを用意してから、パスを指定して実行したところ、 > 先に進みました。ありがとうございます! よかったです! > 先には進んだのですが、別のエラー↓が出てしまいました。。。 > > Don't know how to build task 'tmp/i386-mingw32/stage/vendor/local' > > tmp/.../stage/にvendor/がコピーされていないようです。 > gem:win32:build:vendorタスクの後に手動で > tmp/.../stage/にvendor/をコピーしてからgem:win32:build:ext > タスクを実行すると、エラーは発生せず、pkg/に > glib2-2.0.3-x86-mingw32.gemが作成されました。 > > 本来は自動でコピーされると思うのですが、手順ミスでしょうか。 あぁ、rake-compilerのバージョンがあがって挙動が変わったから ですねぇ。ruby-gnome2側を直す必要があります。 https://github.com/ranguba/rroonga/blob/master/Rakefile#L152 のコード相当の処理をruby-gnome2の今のビルドシステムに組み込 むとよさそうな気がします。 >> どこでpkg-configを扱うのがよいか決めあぐねてこのままなのでし >> た。すみません。。。 >> >> 実は、以下のようにMAKE_N_JOBSも指定して複数のCPUコアを使って >> ビルド時間を短縮したりもしています。。。 >> >> % RUBYLIB="$HOME/work/ruby/pkg-config/lib" MAKE_N_JOBS=8 rake ... >> >> うーん、rcairoみたいに相対パスからも探すようにするのがよいか >> しら。。。 > > 難しいですね。。。 > ひとまず、作業が一段落したらリリース手順に追記しておきます。 > (手順があれば当面はそのままでも大丈夫かと思います) そうですね、そうしておきましょう! |
From: Kouhei S. <ko...@co...> - 2013-11-05 09:53:03
|
須藤です。 In <CAET2rA_hdtZihMP8ZVtFD=_h9...@ma...> "Re: [ruby-gnome2-devel-ja] Windows用gemのクロスコンパイルと動作確認について" on Mon, 4 Nov 2013 23:59:15 +0900, Masafumi Yokoyama <my...@gm...> wrote: > gem作成失敗の件ですが、rakeのgem:win32:build:extタスクが > > `require': cannot load such file -- pkg-config (LoadError) > > が出て失敗してしまいます。設定が足りないでしょうか? > rake-compilerは、以下のコマンドで設定しました。 > > rake-compiler cross-ruby VERSION=1.9.3-p448 EXTS=--without-extension > rake-compiler cross-ruby VERSION=2.0.0-p247 EXTS=--without-extension > > 失敗時のログとrake-compilerのconfig.ymlは以下です。 > https://gist.github.com/myokoym/7303335 あぁ、これなんですが、実は、手元ではRUBYLIBでローカルの pkg-config gemのパスを指定していました。 % RUBYLIB="$HOME/work/ruby/pkg-config/lib" rake ... どこでpkg-configを扱うのがよいか決めあぐねてこのままなのでし た。すみません。。。 実は、以下のようにMAKE_N_JOBSも指定して複数のCPUコアを使って ビルド時間を短縮したりもしています。。。 % RUBYLIB="$HOME/work/ruby/pkg-config/lib" MAKE_N_JOBS=8 rake ... うーん、rcairoみたいに相対パスからも探すようにするのがよいか しら。。。 >>> パッチの作成までやってみました。せっかくとてもわかりやすい手順を >>> 書いていただいたので、報告も私の方でやってみてよいでしょうか? >> >> ありがとうございます!ぜひ、よろしくおねがいします! >> とても助かります!!! > > 報告してみました! > https://bugzilla.gnome.org/show_bug.cgi?id=711372 すばらしいです! |
From: Kouhei S. <ko...@co...> - 2013-11-03 12:51:55
|
須藤です。 In <CAET2rA872Xtbq7NyVTvPHwivjw2CqTc+_6huh=66N...@ma...> "Re: [ruby-gnome2-devel-ja] Windows用gemのクロスコンパイルと動作確認について" on Sun, 3 Nov 2013 18:46:59 +0900, Masafumi Yokoyama <my...@gm...> wrote: > そうでしたか。ということは、 checking whether we are cross compiling... > はnoのままで問題ないということですね! はい、そうです。 64bit版Windows用のバイナリに対応するときはyesになると思いま すが、32bit版Windows用のバイナリをビルドするときはnoのままで 問題ないです!今のDebian/Ubuntuでは64bit版のexeが動くWineが パッケージとして提供されていないのでexeが実行できずにクロス コンパイル扱いになると思います。 >> これで、パッチの登録は完了です。もう一度ビルドすると自動でパッ >> チを当ててビルドしてくれます。 >> >> ruby-gnome2.win32/glib% rake win32:build >> >> これで、GLibのビルドがうまく通ったらこのパッチで問題がないこ >> とがわかります。それでは、本家に報告しましょう。 > > 問題がないことを確認したので、先にRuby-GNOME2の方に > コミットしてしまおうと思います。できればgemの動作確認まで > してからコミットしたかったのですが、gemの作成でつまづいて > しまったので、確認はできていません。gemの作成については > 別途質問させてください。 はい! >> コミットしたらパッチを作ります。 >> >> glib% git format-patch origin/master >> 0001-test-add-missing-EXEEXT.patch >> >> カレントディレクトリに0001-test-add-missing-EXEEXT.patchとい >> うファイル名でパッチができます。これをGLibに報告します。 > > パッチの作成までやってみました。せっかくとてもわかりやすい手順を > 書いていただいたので、報告も私の方でやってみてよいでしょうか? ありがとうございます!ぜひ、よろしくおねがいします! とても助かります!!! |
From: Kouhei S. <ko...@co...> - 2013-11-02 13:32:39
|
In <CAET2rA_Y9FAdH6xy-L5W5dW-ZHqZiAN6KvU33-=s_h...@ma...> 須藤です。 "Re: [ruby-gnome2-devel-ja] Windows用gemのクロスコンパイルと動作確認について" on Fri, 1 Nov 2013 22:41:50 +0900, Masafumi Yokoyama <my...@gm...> wrote: >> noでした。。。何か足りてないでしょうか。(configureログを含めて貼り直しました↓) >> https://gist.github.com/myokoym/7235664 > > checking whether we are cross compiling... が no になっていた > 理由ですが、Windows用プログラムが実行できるかどうかで判定して > いるらしく、Wineがインストールされているせいで実行できてしま > ってnoになっているようです。とりあえず/usr/bin/wineをリネーム > して試してみると、yesになって先に進みました。 あぁ、なるほど! 手元でも試してみたら、確かに再現しました。 で、調べてみたんですが、これはGLibの問題ですねぇ。 まず、どうしてこのファイルをビルドしようとしているかを確認し ます。 エラーが起きているところ付近は次のようになっています。 make[4]: ディレクトリ `/home/kou/work/ruby/ruby-gnome2.win32/glib2/tmp/glib/glib-2.38.1/tests/gobject' に入ります i686-w64-mingw32-gcc -g -O2 -mms-bitfields -fvisibility=hidden -I/home/kou/work/ruby/rcairo.win32/vendor/local/include -I/home/kou/work/ruby/ruby-gnome2.win32/glib2/vendor/local/include -L/home/kou/work/ruby/rcairo.win32/vendor/local/lib -L/home/kou/work/ruby/ruby-gnome2.win32/glib2/vendor/local/lib ../../gobject/glib-genmarshal.c -o ../../gobject/glib-genmarshal ../../gobject/glib-genmarshal.c:20:20: fatal error: config.h: そのようなファイルやディレクトリはありません compilation terminated. tests/gobject以下でglib-genmarshalを作ろうとしていることがわ かります。ということで、tests/gobject/Makefile.amをのぞいてみ ます。 genmarshalをキーワードに探してみると以下のあたりがみつかりま す。 https://git.gnome.org/browse/glib/tree/tests/gobject/Makefile.am?id=2.38.1#n54 51 if CROSS_COMPILING 52 glib_genmarshal=$(GLIB_GENMARSHAL) 53 else 54 glib_genmarshal=$(top_builddir)/gobject/glib-genmarshal 55 endif ... 58 @true 59 stamp-testmarshal.h: @REBUILD@ testmarshal.list $(glib_genmarshal) 今回はCROSS_COMPILINGじゃないので 54 glib_genmarshal=$(top_builddir)/gobject/glib-genmarshal が使われているはずです。 stamp-testmarshal.hが$(glib_genmarshal)に依存しているので $(top_builddir)/gobject/glib-genmarshalがないかチェックして、 ないと判断してビルドしようとしているのでしょう。 では、本当にないのか確認してみましょう。 % ls -la gobject/ | grep genmarshal -rw-r--r-- 1 kou kou 35699 5月 8 03:26 glib-genmarshal.c -rwxr-xr-x 1 kou kou 32768 11月 2 21:19 glib-genmarshal.exe -rw-r--r-- 1 kou kou 60889 11月 2 21:19 glib-genmarshal.o たしかにありません。が、glib-genmarshal.exeがあります。 Windowsでは実行ファイルの拡張子は.exeになるのでした。しかし、 tests/gobject/Makefile.amは.exeなしのパスを探しています。な ので、実は欲しいものがあるのに無理やりビルドしようとしてエラー になっています。 ということで、glib_genmarshalのパスを正しいものに直してやれ ば動くはずです。 実は、この.exeなしのやつはWindows上でビルドしていないときは よくある問題で、これは以下のように$(EXEEXT)を使えば解決でき るパターンです。 -glib_genmarshal=$(top_builddir)/gobject/glib-genmarshal +glib_genmarshal=$(top_builddir)/gobject/glib-genmarshal$(EXEEXT) ^^^^^^^^^ EXEEXTはAutomakeが自動で定義してくれる(*)変数です。実行ファイ ルの拡張子が設定されていて、環境ごとに固有の値を自動で検出し ています。UNIX系のプラットフォームでは空文字列でWindowsだと 「.exe」になっています。 (*) もう少し詳しく言うとAutoconfが生成するconfigureがEXEEXTに 設定する値を検出してAutomakeがその値をEXEEXTという変数に 設定しています。 参考: http://www.gnu.org/software/automake/manual/html_node/EXEEXT.html なので、よりポータブルなMakefile.amにする場合は実行ファイル のパスの最後には$(EXEEXT)をつけるべきなのですが、実行ファイ ルに拡張子がない環境でだけビルドしているときはこれに気づかな いんですよ。 で、私達はこういうときはどうするかというと本家(アップストリー ム)に報告します。手元でパッチを当ててこのプロジェクトでだけ 回避することもできますが、そうせずに、本家に報告してあるべき ところで修正します。そうすれば、私達だけでなく、他の人たちも この問題に困ることはなくなります。少しでもそんな世界に近づく ために、私達は本家に報告します。 私達もユーザーのみなさんからバグレポートなどをもらってよりよ くしていっています。なので、私達がユーザーのプロジェクトに対 してもバグレポートを送ってそのプロジェクトをよりよくしていき ます。 ということで、GLibにバグレポートを送るわけですが、まず、これ で本当に直るか確認します。 実は、Ruby-GNOME2のビルドシステムにはクロスコンパイルすると きにパッチを当てる仕組みが入っているのでそれを使います。 そのために、まず、パッチを作ります。tmp/download/以下にtarが あるのでそれを展開します。 ruby-gnome2.win32/glib/tmp% tar xf download/glib-2.38.1.tar.xz 変更するファイルをコピーします。このとき、もとのファイル名 に.origをつけます。これは、バージョン管理システムで管理され ていないファイルに対するパッチを作るときのよくある慣習です。 ruby-gnome2.win32/glib/tmp% cp -p glib-2.38.1/tests/gobject/Makefile.am{,.orig} ファイルを変更します。 ruby-gnome2.win32/glib/tmp% editor glib-2.38.1/tests/gobject/Makefile.am ruby-gnome2.win32/glib/tmp% diff -u glib-2.38.1/tests/gobject/Makefile.am{.orig,} --- glib-2.38.1/tests/gobject/Makefile.am.orig 2013-09-23 23:02:08.000000000 +0900 +++ glib-2.38.1/tests/gobject/Makefile.am 2013-11-02 21:48:21.991908689 +0900 @@ -51,7 +51,7 @@ if CROSS_COMPILING glib_genmarshal=$(GLIB_GENMARSHAL) else - glib_genmarshal=$(top_builddir)/gobject/glib-genmarshal + glib_genmarshal=$(top_builddir)/gobject/glib-genmarshal$(EXEEXT) endif testmarshal.h: stamp-testmarshal.h $(EXEEXT)を追加しただけです。 diffをみて変更が意図したものか確認したらglib2/patches/以下に パッチを置きます。 ruby-gnome2.win32/glib/tmp% diff -u glib-2.38.1/tests/gobject/Makefile.am{.orig,} > ../patches/glib-2.38.1-add-missing-exeext.diff パッチの名前に制限はありませんが、内容がわかりやすいように以 下のフォーマットにしてください。ファイル名なので「簡潔な説明」 にはスペースなど普通はファイル名に使わない文字は避けてくださ い。 #{パッケージ名}-#{バージョン}-#{簡潔な説明}.diff 今回の場合は以下のようになっています。 パッケージ名: glib バージョン: 2.38.1 簡潔な説明: add-missing-exeext パッチを置いたらglib2/Rakefileを以下のように変更します。 diff --git a/glib2/Rakefile b/glib2/Rakefile index 9452f1b..960683f 100644 --- a/glib2/Rakefile +++ b/glib2/Rakefile @@ -32,6 +32,9 @@ package = GNOME2Package.new do |_package| "--disable-modular-tests", ], :need_autoreconf => true, + :patches => [ + "glib-2.38.1-add-missing-exeext.diff" + ], }, }, { external_packagesのGLib用のエントリーの中の [:windows][:patches]の中にpatches/以下のファイル名を指定して います。 { :name => "glib", :download_site => :gnome, :label => "GLib", :version => "2.38.1", :compression_method => "xz", :windows => { :configure_args => [ "LIBFFI_CFLAGS=-I#{include_dir}", "LIBFFI_LIBS=-L#{libffi_lib_dir} -lffi", "--disable-modular-tests", ], :need_autoreconf => true, :patches => [ "glib-2.38.1-add-missing-exeext.diff" ], }, } これで、パッチの登録は完了です。もう一度ビルドすると自動でパッ チを当ててビルドしてくれます。 ruby-gnome2.win32/glib% rake win32:build これで、GLibのビルドがうまく通ったらこのパッチで問題がないこ とがわかります。それでは、本家に報告しましょう。 まず、GLibのソースをcloneします。 % git clone git://git.gnome.org/glib masterでも同じ問題があるか確認します。 https://git.gnome.org/browse/glib/tree/tests/gobject/Makefile.am#n54 54 glib_genmarshal=$(top_builddir)/gobject/glib-genmarshal $(EXEEXT)がないので同じ問題がありそうです。 本当はmasterでも同じ問題が発生するかを確認したほうがいいんで すが、明らかに問題があることがわかるので省略します。というか、 うまくビルドできないなぁとわかった時点でmasterでは直っている かも?と思って確認するほうがいいですね。もし、直っていたらそ の修正をバックポートすればいいので。 問題があることがわかったのでパッチを作ります。 glib% git checkout -b add-missing-exeext glib% editor tests/gobject/Makefile.am glib% git diff diff --git a/tests/gobject/Makefile.am b/tests/gobject/Makefile.am index 84f7410..2bce8b5 100644 --- a/tests/gobject/Makefile.am +++ b/tests/gobject/Makefile.am @@ -51,7 +51,7 @@ endif if CROSS_COMPILING glib_genmarshal=$(GLIB_GENMARSHAL) else - glib_genmarshal=$(top_builddir)/gobject/glib-genmarshal + glib_genmarshal=$(top_builddir)/gobject/glib-genmarshal$(EXEEXT) endif testmarshal.h: stamp-testmarshal.h glib% git add tests/gobject/Makefile.am コミットする前に過去のコミットログを確認してどんな感じでコミッ トメッセージを書くか雰囲気を確認します。 glib% git log --stat -p 「/^commit」で検索して、「n」していくと次々にコミットを見れ て便利です。ざっくり最近の数10個を確認すると 分類: 一言説明 詳細な情報 みたいになっていることがわかります。「分類」はファイル名だっ たりクラス名だったりするので、そんなに厳密なものではなさそうで す。「一言説明」もそんなに厳密ではなさそうです。現在形なら大 文字始まりでも小文字始まりでもよさそうです。小文字始まりが少 し多いかなぁというくらいです。 ということで、雰囲気がわかったのでコミットします。私ならこん な感じにします。 glib% git commit glib% git log -1 commit 3a9710f74e055813667d1d60b8a60668676da197 Author: Kouhei Sutou <ko...@cl...> Date: Sat Nov 2 22:07:19 2013 +0900 test: add missing $(EXEEXT) $(EXEEXT) is needed for executable file path. Because some platforms such as Windows require extension such as .exe for executable file path. コミットしたらパッチを作ります。 glib% git format-patch origin/master 0001-test-add-missing-EXEEXT.patch カレントディレクトリに0001-test-add-missing-EXEEXT.patchとい うファイル名でパッチができます。これをGLibに報告します。 GLibは https://bugzilla.gnome.org/ でバグレポートを受け付け ています。まず、ログインします。 バグレポートをする前にすでに同じ問題がないか確認します。とい うか、直す前にまず確認したほうがいいですね!ここに同じ問題が 報告されていてパッチもついていてそれでよさそうならそれを使え ばいいので。 まぁ、それはいいとして画面上部の検索フォームにキーワードを入 れて「Find」ボタンを推します。今回の場合は「EXEEXT」でいいで しょう。 https://bugzilla.gnome.org/buglist.cgi?quicksearch=EXEEXT 昔、私が報告したEXEEXTが足りないよバグレポートが放置されてい たりしますが、 https://bugzilla.gnome.org/show_bug.cgi?id=690879 今回はこっちが少し似ているかもですねえ。 https://bugzilla.gnome.org/show_bug.cgi?id=711047 が、これはVisual StudioでビルドするためにVisual Studio用の Makefileを追加する方向みたいなので少し違いそうです。 ということで、問題を報告します。 画面上部のメニューの「New」→「All」→「glib」とリンクをたど ります。(ページ内検索しないと見つけるのが大変でしょう。) バグレポートのフォームがでてきますね。 「Component」は「win32」で「Version」は「2.39.x」で「OS」は 難しいところですが「Linux」ですかねぇ。Linux上でクロスコンパ イルしているので。 「Summary」に一言説明を書きます。うーん、私なら 「Cross compiling on Linux with Wine for Windows with mingw64 fails to build test/gobject/.」ですかねぇ。 「Description」には以下を含めます。 * 何が問題かの説明 * 再現方法 * 期待する結果 * 実際の結果 問題を解決するために必要な情報ですね。私達も開発者なので、自 分がどんな情報をもらえば問題を解決しやすいかは考えやすいと思 います。 今回の場合は「再現方法」でクロスコンパイルしないといけないで すねぇ。。。ruby-gnome2をcloneしてとかは敷居が高いのでできれ ばコマンドラインの羅列にしたいところですが、依存ライブラリー とか用意するの面倒ですよねぇ。。。 本質的には↓だけでいいんですが、 % ./configure --host=i686-w64-mingw32 FFIとか用意しないといけないんですよねぇ。 私の過去の報告をみると再現方法書いていないですね。。。 https://bugzilla.gnome.org/show_bug.cgi?id=690879 ま、まぁ、今回は再現方法はいいかなぁ。。。 「Attachment」に0001-....patchを添付して、Descriptionにはパッ チの説明を書きます。私は「A patch that fixes the problem.」 とか書いています。 最後に「Commit」でバグレポートは完了です。 と長々書きましたが、私はいつもこんな感じでやっています! |
From: Masafumi Y. <my...@gm...> - 2013-10-31 16:54:50
|
横山です。 2013年10月31日 23:18 Kouhei Sutou <ko...@co...>: > 私、2年前にこんなの書いていたんですね!すごい。。。 > https://github.com/ruby-gnome2/ruby-gnome2/blob/master/release.rd さすがです! > 少し古くなってますけど。。。 > 例えば、今はrake dist:testでtar.gzのテストができたりします。 更新した方がよさそうですか? > Rubyは2.0.0を使ってください。Ruby 1.9.3バンドルのRubyGemsが > 古くて最新のrake-compilerだと使えないんですよ。(1.9.3バンド > ルのRubyGemsをアップデートしてもいいです。) 了解です。 >> 早速ですが、GLib-2.38.1をクロスコンパイルしようとすると、 >> >> ../../gobject/glib-genmarshal.c:20:20: fatal error: config.h: >> そのようなファイルやディレクトリはありません >> >> というエラーが出ました。 >> https://gist.github.com/myokoym/7235664 > > うーん、クロスコンパイル判定がうまくいっていないような気が済 > ますねぇ。クロスコンパイルしているときは > gobject/glib-genmarshalを作るんじゃなくてシステムの > glib-genmarshalを使うはずなんですよ。 > > configureすると > > checking whether we are cross compiling... > > みたいなのがでていると思うのでyesになっているか確認してみて > ください。 noでした。。。何か足りてないでしょうか。(configureログを含めて貼り直しました↓) https://gist.github.com/myokoym/7235664 |
From: Masafumi Y. <my...@gm...> - 2013-11-03 06:43:43
|
横山です。 2013年11月2日 21:16 Kouhei Sutou <ko...@co...>: >>> 少し古くなってますけど。。。 >>> 例えば、今はrake dist:testでtar.gzのテストができたりします。 >> >> 更新した方がよさそうですか? > > はい! > おねがいします! > > 最新の情報に追従して、リリースするときはそれを参照すればだれ > でもできる状態にしたいです! わかりました!今はGistにメモしながら進めているのですが、 まとまったらマージしたいと思います。 |
From: Kouhei S. <ko...@co...> - 2013-11-03 12:43:49
|
須藤です。 In <CAET2rA8p=N+oeLiiWcTBYKKX4d-CRzfSOvsAO3dJ8DSK7=gL...@ma...> "Re: [ruby-gnome2-devel-ja] Windows用gemのクロスコンパイルと動作確認について" on Sun, 3 Nov 2013 15:43:35 +0900, Masafumi Yokoyama <my...@gm...> wrote: >>>> 少し古くなってますけど。。。 >>>> 例えば、今はrake dist:testでtar.gzのテストができたりします。 >>> >>> 更新した方がよさそうですか? >> >> はい! >> おねがいします! >> >> 最新の情報に追従して、リリースするときはそれを参照すればだれ >> でもできる状態にしたいです! > > わかりました!今はGistにメモしながら進めているのですが、 > まとまったらマージしたいと思います。 ありがとうございます! |
From: Kouhei S. <ko...@co...> - 2013-11-02 12:17:12
|
須藤です。 In <CAE...@ma...> "Re: [ruby-gnome2-devel-ja] Windows用gemのクロスコンパイルと動作確認について" on Fri, 1 Nov 2013 01:54:44 +0900, Masafumi Yokoyama <my...@gm...> wrote: >> 少し古くなってますけど。。。 >> 例えば、今はrake dist:testでtar.gzのテストができたりします。 > > 更新した方がよさそうですか? はい! おねがいします! 最新の情報に追従して、リリースするときはそれを参照すればだれ でもできる状態にしたいです! GLib 2.38.1の方は別メールで。。。 |