nod::ぶろぐ:RIA::Flex/AIR/Flash

FlashやFlex,(Ajax),S2Flex2,ActionScript3,yui-frameworks,Akabanaプロジェクトなどのメモ帳

Mac OS Xで(も)tamarinのabcdump.asからabcdump.exeを作る

によとん(てっく煮ブログ)さんが書いたエントリーをみて、Mac OS Xでも動くabcdump.exeが欲しいなぁと思い真似して作ってみました。

Wndowsでは、avmplus.exeFlex SDKの中にbuildしたものがあるのに対して、Mac OS Xではbuild済みのバイナリがなかったのでbuildしたこと、tamarinのコードを取得する為のMercurialをインストールする為にmacportsを利用したのですが、以前インストールしてしばらく使っていなかったせいか、時間がかかった以外は特に問題なくbuildすることができました。

abcdump-20090126-mach-o-universal.zip

使い方は、windowsと一緒です。

abcdump hogehoge.abc

abcの作成方法はにとよんさんのエントリーに書かれています。


buildした方法は以下の通りです。

1.tamarin_centralのコードを取得する。

 コード取得に必要なmercurialをmacportsでインストールします。

過去にmacportsを導入していたので、そのままインストールしようとしたら 依存するモジュールのビルドに失敗していまいました。

$ sudo /opt/local/bin/port install mercurial
Error: The following dependencies failed to build: python24 gettext ncurses ncursesw gawk
Error: Status 1 encountered during processing.

上記はライブラリの更新することで解消しました。

$ sudo /opt/local/bin/port -d sync

次にもう一度インストールしようとすると別のエラーが..

$ sudo /opt/local/bin/port install mercurial
Password:
Error: Unable to execute port: can't read "frameworks_dir": no such variable

これはports自身を更新することで、解消ができました。

$ sudo port -v selfupdate
$ sudo /opt/local/bin/port -d sync

この後に3回目のインストールに挑戦。

$ sudo /opt/local/bin/port install mercurial

ようやくmecurialのインストールができました。第一関門突破です。
これでTamarinのソースがDownloadできるようになったのでhgコマンドを使って取得します。

/opt/local/bin/hg clone http://hg.mozilla.org/tamarin-central tamarin-central

これでソースの準備ができました。

2. asc.jarの準備をする。

次に必要なabcファイルを作るのに必要なasc.jarを取得します。Flex SDKに含まれているものを利用するとの事なので、既に/Developer/SDKs/以下に溜め込んでいる(インストールしている)Flex SDKから利用しました。
こんな今インストールしているのはこんな感じ。

$ ls -1 /Developer/SDKs/
flex3
flex_sdk4_nightly
flex_sdk_2_hotfix1
flex_sdk_2_hotfix2
flex_sdk_2_hotfix3
flex_sdk_3.0.1.1844
flex_sdk_3.0.2.2113
flex_sdk_3.0.3.2490
flex_sdk_3.1.0.2710
flex_sdk_3.2.0.3381
flex_sdk_3_branch
flex_sdk_4.0.0.3048
flex_sdk_4_trunk

上記のSDKの中では3.x系の最新である、flex_sdk_3.2.0.3381以下にあるasc.jarを使いました。

Flex SDKがインストールされていない時、現時点での最新が欲しい時にDownloadするには、こちら http://opensource.adobe.com/wiki/display/flexsdk/Downloads
SDK以下にある、lib/asc.jarを使ってasからabcファイルを作ります。

3. abcdump.as から abcdump.abc を作る

ここのプロセスは にとよん(nitoyon)さんと一緒でした。特に苦労もしてません。

$ java -jar /Developer/SDKs/flex_sdk_3.2.0.3381/lib/asc.jar core/builtin.as
$ java -jar /Developer/SDKs/flex_sdk_3.2.0.3381/lib/asc.jar -import core/builtin.abc shell/ByteArray.as
$ java -jar /Developer/SDKs/flex_sdk_3.2.0.3381/lib/asc.jar -import core/builtin.abc -import shell/ByteArray.abc utils/abcdump.as 

上記の通りFlex3.2に付属のasc.jarではコンパイルしてabcファイルができましたが、 flex4(flex_sdk_4.0.0.3048)のasc.jarではエラーがでてコンパイルできませんでした。 なにかが変わっているのかもしれません。
先が長いのでこの時点では追究しないことにします。

4.avmplus(shell)を作成する。

Windowsと違ってavmplusがないので、自分で作成します。
コンパイルにはXCode3.0を使いました。

$ cd tamarin-central/platform/mac/shell
$ xcodebuild -project shell.xcodeproj

コンパイルが終わると以下のディレクトリにshellと言う名前でavmplusができます。

$  tamarin-central/platform/mac/shell/build/Release/shell/shell

実行すると以下のようにメッセージが出てきます。

avmplus shell 1.0 build cyclone

usage: avmplus
          [-memstats]   generate statistics on memory usage
          [-memlimit d] limit the heap size to d pages
          [-cache_bindings N]   size of bindings cache (0 = unlimited)
          [-cache_metadata N]   size of metadata cache (0 = unlimited)
          [-Dinterp]    do not generate machine code, interpret instead
          [-Dforcemir]  deprecated, use -Ojit
          [-Ojit]       use jit always, never interp
          [-Dnocse]     disable CSE optimization 
          [-Dnosse]     use FPU stack instead of SSE2 instructions
          [-Dtimeout]   enforce maximum 15 seconds execution
          [-error]      crash opens debug dialog, instead of dumping
          [-log]
          [-- args]     args passed to AS3 program
          [-jargs ... ;] args passed to Java runtime
          filename.abc ...
          [--] application args

これでMac OS Xでもavmplusが動くようになった!。
これでできたshell(tamarin-central/platform/mac/shell/build/Release/shell/shell)を適当なディレクトリ(/opt/local/binとか?)にコピーして実行できるようにします。

$ cp -p tamarin-central/platform/mac/shell/build/Release/shell/shell /opt/local/bin/
これで実行できるようになりました。
$ /opt/local/bin/shell abcdump.abc -- hogehoge.abc

5. avmplus と結合して abcdump.exe を作る

avmplus(shell)の生成ができたので、abcファイルをあわせてabcdump.exeを作ります。ここでの作り方も、にとよん(nitoyon)と一緒です。

$ java -jar /Developer/SDKs/flex_sdk_3.2.0.3381/lib/asc.jar -exe ~/avm_work/tamarin-central/platform/mac/shell/build/Release/shell -import core/builtin.abc -import shell/ByteArray.abc utils/abcdump.as

上記を実行すると、abcdump.exeがができました。

$  ls~/avm_work/tamarin-central/utils/abcdump.exe

実行ファイルに実行権をつけます。

$  chmod +x abcdump.exe

ファイル名の拡張子をなくしてみました。

$ mv abcdump.exe abcdump

これでabcdump無事ができました。以前Mac OS X 10.4の頃には作成していたのですがディスク交換をしてLeopard(10.5)にしたので使えなくなっていました。今回の作成したことでLeopardでもまた使えるようになりうれしいです。元のエントリーで作り方を紹介してくれた、にとよんさんに感謝です。

以下メモ

  • MacPortsは導入したほうがいいと思う。
  • MacPorts導入後は、ライブラリとmacports自身の更新を忘れずに。
  • portコマンドでうまく動かないときは、update,sync,cleanをする。
  • XCodeも有ると便利。(Alchemyとか..)
  • mercurialはバイナリパッケージをインストールするほうが楽だったかも
  • Flex_SDKにwindows版のavmplusはコンパイルしたものがある。
  • mac版は自分でbuildする必要がある。
  • 2009/1/24時点ではFlex 4のasc.jarではうまく作れなかった。
  • Gumbo SDKで生成されたswfやabcでできるかは今後の課題
  • このエントリー書き始めたの一週間前..orz
  • 関連とかリンクとか

    #きっかけ
    Tamarin の abcdump.as から abcdump.exe を作成する方法 2009年1月版 - てっく煮ブログ
    http://d.hatena.ne.jp/nitoyon/20090123/abcdump_build

    # Tamarinのbuild方法。日本語のドキュメント。
    Tamarin Build Documentation - MDC
    https://developer.mozilla.org/ja/Tamarin_Build_Documentation

    #Macportsの使い方
    えせSEの1日1Hack : MacPortが便利なので、まずは基本コマンドをまとめておく
    http://www.key-p.com/blog/ohnishi/article.php?id=112

    #macportsに関するスライド。installからコマンドの使い方まで紹介されています。
    MacPorts
    http://www.scribd.com/doc/2674173/MacPorts

    OSS で SWF をデコンパイルする(2) - swfassist と abcdump で亜流デコンパイラ - てっく煮ブログ
    http://d.hatena.ne.jp/nitoyon/20080401/swfassist_abcdump

    #各OS毎のmercurialを取得するリンクあり。windowsならInstallerや、cygwin,Macならpackageとfink,macports,Linuxならrpmなど
    BinaryPackages - Mercurial
    http://www.selenic.com/mercurial/wiki/index.cgi/BinaryPackages#head-ea0494fa54ddf09d8995040bbe29a65ecc04d9d9

    #mercurialのバイナリパッケージ
    Mercurial binary packages for Windows and Mac OS X
    http://mercurial.berkwood.com/

    #IT戦記 amachangによるLinuxでのbuild方法。あとでubuntuで試したい。
    Linux で tamarin のビルドできた - IT戦記
    http://d.hatena.ne.jp/amachang/20070312/1173696872

    #abcdump.asを分解してクラス化し、さらにFlexで使いやすい形に加工する機能までつけたswc.
    中垣 茂 ( Shigeru Nakagaki ) | ブログ ( Flex, AIR, ColdFusion ) | AbcDumper.swc : SWFダンプの実行コード例
    http://shigeru-nakagaki.com/index.cfm/2008/3/19/20080320-About-AbcDumper-SWC
    中垣 茂 ( Shigeru Nakagaki ) | ブログ ( Flex, AIR, ColdFusion ) | Flex 2.0.1 と Flex 3.0 の API を Diff するツールを作ってみた
    http://shigeru-nakagaki.com/index.cfm/2008/3/18/20080318-LibraryManager-Beta-is-released
    #上記を含むShigeru Nakagakiプロジェクト紹介ページ
    中垣 茂 ( Shigeru Nakagaki ) | プロジェクト
    http://shigeru-nakagaki.com/?content=projects

    #Mac OS Xでavmplusで対話モードを追加
    daoki2/avmplus - Spark project
    http://www.libspark.org/wiki/daoki2/avmplus

    #be-interactive yossyさんによるshibuya.abc#1の基調講演ビデオ
    1 基調講演 (Tamarinで遊ぼう) beinteractiveさん - 動画 - はてなダイアリー
    http://d.hatena.ne.jp/video/niconico/sm2680014

    #上記の資料と、Shibuya.abc#1の内容とか。
    BeInteractive! [Shibuya.abc#1を開催しました + サーバーサイドActionScript]
    http://www.be-interactive.org/index.php?itemid=343

    Posted by nod at 2009年01月31日 23:10 | コメント (0) | Clip!! | Clip!! | このエントリーを含むはてなブックマーク |digg it! |del.icio.us it!

    この記事に対するコメント

    この記事に対するコメントはまだありません。


    コメントを投稿する




    保存しますか?



    Flex.org - The Directory for Flex Get Adobe Flash Player Made with dreamweaverMade with fireworksPowered by Movable Type 3.36Powered by Wandering Wind
    Copyright : [Articles] (C) nod::ぶろぐ:RIA::Flex/AIR/Flash All Rights Reserved.
    [Comments/Trackbacks] ... Authors of those have rights.