By | 2008年9月29日

どうも。久しぶりにエントリー書きます。
今回は compc を使って swc ファイルの作成を行います。
その際になんと、、、、
Class ファイルをすべてコマンドラインから指定してやらないといけないみたいなのです。

1
compc compc -output [作成されるファイル名] -source-path [sourceのある場所] --include-classes [すべてのクラスファイル]

これを実行すると swc ファイルを自分で作成することができます。

ただ何が問題かっていうと、
–include-classes にすべてのクラスファイルを指定しないといけないんです。
org.libspark.asreflect.errors.ASReflectError こんなフォーマットで。
これをファイルパスから取り出すのなんてめんどくさすぎる。
しかも / でなくて . 区切り。

というわけで、そこで perl の登場です。(※ここでは ASReflect を使用しています)
まず file だけを出力し、さらに .svn 以下のファイルを省きます。

1
find -type f | grep -v svn

この結果、出力される形式がこんな感じ

./org/libspark/asreflect/errors/ASReflectError.as
./org/libspark/asreflect/errors/NotFoundError.as
./org/libspark/asreflect/Method.as
./org/libspark/asreflect/Property.as
./org/libspark/asreflect/Parameter.as
./org/libspark/asreflect/Member.as
./org/libspark/asreflect/MetadataAware.as
./org/libspark/asreflect/Metadata.as
./org/libspark/asreflect/Type.as
./org/libspark/asreflect/ASReflect.as
./org/libspark/asreflect/TypeFactory.as
./org/libspark/asreflect/builders/BasicConstantHandler.as
./org/libspark/asreflect/builders/BasicTypeFactory.as
./org/libspark/asreflect/builders/BasicVariableHandler.as
./org/libspark/asreflect/builders/ImplementsInterfaceHandler.as
./org/libspark/asreflect/builders/ExtendsClass.as
./org/libspark/asreflect/builders/ImplementsInterface.as
./org/libspark/asreflect/builders/ParseContext.as
./org/libspark/asreflect/builders/BasicConstructorHandler.as
./org/libspark/asreflect/builders/BasicFactoryHandler.as
./org/libspark/asreflect/builders/ElementHandler.as
./org/libspark/asreflect/builders/BasicTypeHandler.as
./org/libspark/asreflect/builders/BasicAccessorHandler.as
./org/libspark/asreflect/builders/BasicParameterHandler.as
./org/libspark/asreflect/builders/BasicMethodHandler.as
./org/libspark/asreflect/builders/Arg.as
./org/libspark/asreflect/builders/BasicMetadataHandler.as
./org/libspark/asreflect/builders/ArgHandler.as
./org/libspark/asreflect/builders/XmlParser.as
./org/libspark/asreflect/builders/ExtendsClassHandler.as
./org/libspark/asreflect/impls/BasicType.as
./org/libspark/asreflect/impls/MetadataAwareSupport.as
./org/libspark/asreflect/impls/BasicMember.as
./org/libspark/asreflect/impls/BasicParameter.as
./org/libspark/asreflect/impls/BasicProperty.as
./org/libspark/asreflect/impls/BasicMetadata.as
./org/libspark/asreflect/impls/BasicMethod.as

これを整形します。
1. ./ を削除
2. .as を削除
3. / を . に変換
4. 空白区切りで連結して出力
この肯定を行えばいいわけです。

そこで登場するのが perl -p です。 perl -n でもいいです。
違いは改行あるかないか程度です。
これを使うことで

1
2
while(<>){
}

これと等価になるわけです。

つまりは、

1
2
3
4
5
6
7
8
perl -ple 'chomp; s{\./}{};s{\.as$}{}s;s{/}{.}g';
 
whild(<>) {
  chomp;
  s{\./}{};
  s{\.as$}{}s;
  s{/}{.}g';
}

ということですね。
簡単で便利です。

これでコマンドラインからの作業が軽減されました。

ちなみにこんなこともできるみたいです。

1
2
3
4
5
6
7
8
perl -ple 'push @a, $_; }{ print @a;';
 
whild(<>) {
  push @a, $_;
}
{
  print @a;
}

すげぇ~便利!!!
これで出力された値を –include-classes に指定して実行すれば
swc ファイルが生成されます。
これで毎度毎度の作業が楽になりそうです。

perl の特殊変数のメモ
$\ => printの末尾に出力される。 (perl -l だと “\n” のはず??)
$, => printを使った時のセパレータ
$” => リストコンテキスト変数展開をダブルクォートの中で行った時の区切り文字
$/ => ファイルハンドルからとってくる区切り文字

参考資料
特殊変数一覧
Perlコマンドラインオプション