Windows で Flex SDK をビルドしてみた

Windows XP で、オリジナル mxmlc から SWF を作るところまで。

まずは、README.txt に従って、下準備。

J2SDK の導入

Archive: Download Java 2 SDK, Standard Edition, v 1.4.2_14 (J2SE) から j2sdk1.4.2_14 をダウンロード。

C:\j2sdk1.4.2_14 にインストールする。

Apache Ant の導入

http://archive.apache.org/dist/ant/binaries/ より apache-ant-1.6.2-bin.zip をダウンロード。

C:\apache-ant-1.6.2 に展開。

Cygwin の導入

http://cygwin.com/ から setup.exe を実行。

全てデフォルトで。

環境設定

ここからは Build and Test - Flex SDK - Confluence を見ながら。

trunk、tags、branches の中からビルドするものを選ぶ。ここでは、trunk でビルドしてみることにする。

cygwin を起動。trunk のフォルダに移動して、setup.sh を実行する。

cd flex/sdk/trunk
source setup.sh

エラーが出た。

bash: $'\r': command not found
bash: $'\r': command not found
bash: $'\r': command not found
bash: setup.sh: line 41: syntax error near unexpected token `$'in\r''
'ash: setup.sh: line 41: `case `uname` in

setup.sh の改行コードを LF にしたらうまくいった。

$ source setup.sh
setup.sh: Setting default  ANT_HOME=/cygdrive/c/apache-ant-1.6.2
setup.sh: Setting default JAVA_HOME=/cygdrive/c/j2sdk1.4.2_14

ant や j2sdk が見つからない場合は、

setup.sh: setup.sh: WARNING: JAVA_HOME does not exist:
        /cygdrive/c/j2sdk1.4.2_14

のように警告がでる。この場合、正しい場所に導入するか、setup.sh のほうをいじって、パスを変更するべし。再度、setup.sh を叩いて WARNING が出ないことを確認しよう。

ビルド

えいーっ

ant -q main

出力

$ ant -q main
cygpath: can't convert empty path
     [echo] Building lib/swfutils.jar
     [echo] Building lib/swfdump.jar
    [javac] 注: 一部の入力ファイルは推奨されない API を使用またはオーバーライド
しています。
    [javac] 注: 詳細については、-deprecation オプションを指定して再コンパイルし
てください。
     [echo] Building lib/fdb.jar

(中略)

     [echo] Compiling frameworks/projects/flash_integration/libs/FlexComponentBa
se.swc
     [echo] ant main target completed on 03/07/2008 12:45:21 午前

BUILD SUCCESSFUL
Total time: 3 minutes 5 seconds

中途半端に日本語なのが気持ち悪いが Build and Test - Flex SDK - Confluence とだいたい同じ出力になった。

出力結果

lib フォルダに色々できてる。

mxmlc.jar だけじゃなく、mxmlc_ja.jar (日本語版)まで出力されてたりするのがびっくり。

ついでに、framework.swc (mx パッケージの下)なんかもコンパイルされてる。その辺も含めてビルドするのか…。

テスト実施

ant -q checkintests

Flash Player が起動して、自動でテストが始まるのが愉快。

$ ant -q checkintests
cygpath: can't convert empty path
     [echo] launching player and swf
     [echo] compiling checkinapp
     [echo] launching player and swf

BUILD SUCCESSFUL
Total time: 37 seconds

途中でプレーヤーを触ると、例外が出ることがある。UI のテストなんだから、そんなもんか。

コンパイル

$ bin/mxmlc.exe Test.as
設定ファイル "N:\program\as\flexsdk\trunk\frameworks\flex-config.xml" をロードし
ています
N:\program\as\flexsdk\trunk\Test.swf (683 bytes)

mxmlc を使う場合は LF に変換しないとエラーになる。

うまくいってるか半信半疑。ならば…。

ソースをいじる

世界で1つだけの mxmlc を作る。

modules\compiler\src\java\flex2\tools\Compiler.java に次のようなソースが。

    /**
     * The entry-point for Mxmlc.
     * Note that if you change anything in this method, make sure to check Compc, Shell, and
     * the server's CompileFilter to see if the same change needs to be made there.  You
     * should also inform the Zorn team of the change.
     *
     * @param args
     */
    public static void main(String[] args)
    {
        mxmlc(args);
        System.exit(ThreadLocalToolkit.errorCount());
    }

おお、これが mxmlc のエントリポイントのようだ。ならば、main の先頭に

        System.out.print("Hello World\n");

と突っ込む。

mxmlc をリビルドする。全部ビルドすると時間かかるので、compiler のみをビルドしよう。

$ ant -q compiler
cygpath: can't convert empty path
(中略)
     [echo] Building lib/mxmlc.jar
     [echo] Building lib/mxmlc_ja.jar
(中略)

BUILD SUCCESSFUL
Total time: 17 seconds

準備は整った。オリジナルな mxmlc で ActionScript をコンパイルしてみる。

$ bin/mxmlc.exe Test.as
Hello World
設定ファイル "N:\program\as\flexsdk\trunk\frameworks\flex-config.xml" をロードし
ています
N:\program\as\flexsdk\trunk\Test.swf (683 bytes)

ヤター!! ちゃんと Flash Player で再生できるよ!

TODO

Hacking the Flex SDK の人は Bindable の挙動をいじるところまでやってる。もう一息。