によとん(てっく煮ブログ)さんが書いたエントリーをみて、Mac OS Xでも動くabcdump.exeが欲しいなぁと思い真似して作ってみました。
Wndowsでは、avmplus.exeがFlex 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でもまた使えるようになりうれしいです。元のエントリーで作り方を紹介してくれた、にとよんさんに感謝です。
以下メモ
関連とかリンクとか
#きっかけ
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
この記事に対するコメント